2017-01-16 22 views
0

私はPygameでゲームを作ろうとしていますが、目的はゲームを開始することですが、開始ボタンはタッチするたびに動き続けますが、ウィンドウは反応しません。私はそれをテストしたので、まだコードで終わっていない、それは動作しませんでした。Pygameウィンドウが応答しない

import pygame 
import random 
import time 
pygame.init() 
display = pygame.display.set_mode((800,600)) 
pygame.display.set_caption('BEST 3D PLATFORMER FPS GAME!') 
clock = pygame.time.Clock() 
pygame.display.update() 
clock.tick(60) 
display.fill((255,255,255)) 
def newposition() 
    randx = random.randrange(100, 700) 
    randy = random.randrange(100,500) 
while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pass 
     if event.ty 
    button = pygame.image.load('start.png') 
    display.blit(button,(randx,randy)) 

pygame.quit() 
quit() 
+2

ご質問ください。また、それに沿った作業コードが望ましいでしょう。 – robbymurphy

+1

ifステートメントが正しく終了していません。また、あなたは無限にループしていて、「真の間」とは言わずに待機したり、何かを止めさせてゲームをクラッシュさせたりします。 –

+0

チュートリアルを見つけたら、あなたよりも速く学びます。 – furas

答えて

1

すべてのコメント内のコードところで

import pygame 
import random 

# --- constants --- (UPPER_CASE names) 

WHITE = (255, 255, 255) # space after every `,` 

FPS = 30 

# --- classes --- (CamelCase names) 

#empty 

# --- functions --- (lower_case names) 

def new_position(): 
    x = random.randrange(100, 700) # space after every `,` 
    y = random.randrange(100, 500) # space after every `,` 
    return x, y # you have to return value 

# --- main --- (lower_case names) 

# - init - 

pygame.init() 

display = pygame.display.set_mode((800, 600)) # space after every `,` 

pygame.display.set_caption('BEST 3D PLATFORMER FPS GAME!') 

# - objects - 

# load only once - don't waste time to load million times in loop 
button = pygame.image.load('start.png').convert_alpha() 
button_rect = button.get_rect() # button size and position 
button_rect.topleft = new_position() # set start position 

# - mainloop - 

clock = pygame.time.Clock() 

running = True 

while running: 

    # - events - 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      #pass # it does nothing so you can't exit 
      running = False # to exit `while running:` 

     elif event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_ESCAPE: 
       running = False # to exit `while running:` 

     elif event.type == pygame.MOUSEBUTTONDOWN: 
      if event.button == 1: # left button 
       button_rect.topleft = new_position() # set new position 

     # if event.ty # Syntax Error 

    # - updates (without draws) - 

    #empty 

    # - draws (without updates) - 

    # you have to use it inside loop 
    display.fill(WHITE) # clear screeen before you draw elements in new place 

    display.blit(button, button_rect) 

    # you have to use it inside loop 
    pygame.display.update() # you have to send buffer to monitor 

    # - FPS - 

    # you have to use it inside loop 
    clock.tick(FPS) 

# - end - 

pygame.quit() 

simple templateあなたが新しいプロジェクトを開始するときに使用することができます。こここれまでに私のコードです。

PEP 8 -- Style Guide for Python Code

+0

これは非常に素晴らしく、丁寧ですが、彼は彼のために新しいプログラムを書くのではなく、彼のコードを修正するように頼んだだけです。それは非常に素晴らしく寛大ですが、私は同意しますが、すべてがあなたに役立つかどうかを知ることはできません。申し訳ありませんが批判します。 –

+0

@ C._OPはOPコードが醜いので、良いコードを作成する方法を学ぶことができます。 PEP8を参照してください。 – furas

0

あなたも

button = pygame.image.load('start.png')

(それは一度だけ実行する必要があります。)ループの外buttonをロードするために持っている、あなたはnewposition()を定義しを持っていますが、持っていませんそれを呼んだ。また、randxとrandyは、ローカルであるため、外部のからアクセスすることはできません。

ので、これにあなたの関数を変更します。

def newposition() 
    randx = random.randrange(100, 700) 
    randy = random.randrange(100,500) 
    return randx, randy # Output the generated values 

を次に、ループの前に:あなたは、単に更新それへのご変更でpygameの表示に忘れてしまった

rand_coords = newposition() 

。あなたのループの終わりに

pygame.display.update()を追加し、次のように:

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pass 
     # if event.ty why is that here? 

    display.blit(button,(rand_coords[0],rand_coords[1])) # Take our generated values 
    pygame.display.update() 

決勝コード:

import pygame 
import random 
import time 

pygame.init() 
display = pygame.display.set_mode((800,600)) 
pygame.display.set_caption('BEST 3D PLATFORMER FPS GAME!') # Yeah, exactly :) 

clock = pygame.time.Clock() 

display.fill((255,255,255)) 

def newposition() 
    randx = random.randrange(100, 700) 
    randy = random.randrange(100,500) 
    return randx, randy # Output the generated values 

rand_coords = newposition() # Get rand coords 

while True: 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() # Quit pygame if window in closed 
     # if event.ty why is that here? 

    clock.tick(60) # This needs to be in the loop 

    display.fill((255,255,255)) # You need to refill the screen with white every frame. 
    display.blit(button,(rand_coords[0],rand_coords[1])) # Take our generated values 
    pygame.display.update() 
1

私は同様の問題があったが、修正がまっすぐではありません。ここでのpython 3.6.1とpygameの1.9.3のための私のメモです:pygameのために生成され表示しませんので

1)イベントが応答しないが、pygameの初期化後にウィンドウの表示を追加します。

pygame.init() # Initializes pygame 
pygame.display.set_mode((500, 500)) # <- add this line. It generates a window of 500 width and 500 height 

2 )pygame.event.get()は、イベントのリストを生成しますが、すべてのイベントクラスにマウスの動きなどの.keyメソッドがあるわけではありません。したがって、すべてを変更してください。キーイベントは、ウィンドウは、それが/レコードキーボードイベントを集中しない生成された後であっても、これはpygameの問題であるように、いくつかのMAC/Pythonの組み合わせで

if event.type == pygame.KEYDOWN: 
    if event.key == pygame.K_q: 
     stop = True 

3)へ

if event.key == pygame.K_q: 
    stop = True 

としてコードを扱いますsdl2(SDLは、キーボード、オーディオ、マウスなどへの低レベルのアクセスを提供するクロスプラットフォーム開発ライブラリです)を使用してpygameの再実装で修正されています。ここに記載の指示に従ってインストールすることができます。https://github.com/renpy/pygame_sdl2。 MacOSのもう1つのパッケージマネージャーであるhomebrewをインストールする必要があるかもしれません。手順は、pygameの

5)出来上がりとしてpygame_sdl2をインポートするには、すべてのインポートpygameのダウンロードを変更する必要があり、ここでhttps://brew.sh/

4)githubのリンク上の命令を使用して、それをインストールした後に見つけることができます!固定...

関連する問題