2017-12-03 13 views
1

PyGameで私の最初のゲームプロジェクトに取り組んでいますが、キー入力ができません。 (ビッグコードについて申し訳ありませんが、私は推測PyGameでキー入力を実装する方法は?

from pygame import * 

knightpic = image.load('D:\\Game Dev\\Project 1 - Python\\knight01.png') 

bushpic = image.load('D:\\Game Dev\\Project 1 - Python\\bush02.png') 

done = False 


kx = 500 
ky = 400 


bushx = 700 
bushy = 600 


init() 
screen = display.set_mode((1000, 800)) 
display.set_caption('Protect the queen !') 

while done == False: 
    screen.fill(0) 
    screen.blit(knightpic, (kx, ky)) 
    screen.blit(bushpic, (bushx, bushy)) 
    display.update() 

    time.delay(1) 


    keys = pygame.key.get_pressed() 

    if keys[K_LEFT]: 
     bushx += 1 
    if keys[K_RIGHT]: 
     bushx -= 1 
    if keys[K_DOWN]: 
     bushy += 1 
    if keys[K_UP]: 
     bushy -= 1 

は私がインターネット上に成り立っている(作業)のスクリプトをコピーして、私の好みにそれを修正しようとすると、ここでは次のようになります。それは必要ありませんが、ここで使用されているほとんどの機能に慣れていないため、私には見えない問題が含まれている可能性があります)。

私はこの最後の部分を自分で行いました。残り。ゴールはブッシュをナイトに対して相対的に動かすことです。 Ctrl + Eのときは小さなナイトとブッシュが見えますが、キーを押したときは何も表示されません。

読んでいただきありがとうございました。

+1

サイドノート: 'from pygame import *'ではなく '' import pygame'を使用してください。これはバグを避けるのに役立ち、通常はより読みやすくなります。 'time.delay(1)'の代わりに['pygame.time.Clock'](http://www.pygame.org/docs/ref/time.html#pygame.time.Clock)を使用して、引数としてのフレームレートを指定したフレームごとに 'tick 'メソッドを実行します(例を検索する)。 – skrx

+0

'import pygame'はここでは動作しません。私は、この種のアルゴリズムのいくつかの基本が明らかに欠けていると思う。どのように機能が動作するか説明してもらえますか? 'pygame.time.Clock'と' pygame.event.get() 'です。 – Pypaut

+0

main whileループの前にクロックインスタンスを作成する必要があります: 'clock = pygame.time.Clock()'。 whileループで 'clock.tick(maximum_fps)'を呼び出して、ゲームを 'maximum_fps'レートに制限します。つまり、あなたのゲームは、例えば60fpsよりも速く動作するわけではなく、必要以上にCPUパワーを消費しません。 – skrx

答えて

0

イベントはすべてのフレームで処理する必要があります。 pygame.event.get()のイベントループを使用するか、フレームごとにpygame.event.pump()を呼び出すことができます。

while not done: 
    # Either use pygame.event.pump to clear the event queue ... 
    # pygame.event.pump() 

    # or use an event loop like this: 
    for ev in pygame.event.get(): 
     # This allows you to press the 'X' to 
     # quit the game and close the window. 
     if ev.type == pygame.QUIT: 
      done = True 
関連する問題