2016-10-12 11 views
0

キーを押し続けて自動的に四角形を移動しようとしています。私はpygame.key.get.pressed()pygame.key.get.focused()に変更しようとしましたが、まだ何もありません。 CODE、それでも同じ問題(KEYDOWNイベントを含んで)で更新矩形を移動するためのキーの押下

import pygame 

pygame.init() 
screen = pygame.display.set_mode((400,300)) 
pygame.display.set_caption("shield hacking") 
JogoAtivo = True 
GAME_BEGIN = False 
# Speed in pixels per frame 
x_speed = 0 
y_speed = 0 
cordX = 10 
cordY = 100 


def desenha(): 
    screen.fill((0, 0, 0)) 
    quadrado = pygame.draw.rect(screen, (255, 0, 0), (cordX, cordY ,50, 52)) 
    pygame.display.flip();  


while JogoAtivo: 
    for evento in pygame.event.get(): 
     print(evento) 
    #verifica se o evento que veio eh para fechar a janela 
     pressed_keys = pygame.key.get_pressed() 
     if evento.type == pygame.QUIT: 
       JogoAtivo = False 
       pygame.quit(); 
     if pressed_keys[pygame.K_SPACE]: 
       print('GAME BEGIN') 
       GAME_BEGIN = True 
       desenha();   
     if pressed_keys[pygame.K_LEFT] and GAME_BEGIN: 
        speedX=-3 
        cordX+=speedX 
        desenha() 
     if pressed_keys[pygame.K_RIGHT] and GAME_BEGIN: 
        speedX=3 
        cordX+=speedX 
        desenha() 

import pygame 

pygame.init() 
screen = pygame.display.set_mode((400,300)) 
pygame.display.set_caption("shield hacking") 
JogoAtivo = True 
GAME_BEGIN = False 
# Speed in pixels per frame 
x_speed = 0 
y_speed = 0 
cordX = 10 
cordY = 100 


def desenha(): 
    screen.fill((0, 0, 0)) 
    quadrado = pygame.draw.rect(screen, (255, 0, 0), (cordX, cordY ,50, 52)) 
    pygame.display.flip(); 



while JogoAtivo: 
    for evento in pygame.event.get(): 
     print(evento) 
    #verifica se o evento que veio eh para fechar a janela 
     if evento.type == pygame.QUIT: 
       JogoAtivo = False 
       pygame.quit(); 
     if evento.type == pygame.KEYDOWN: 
      if evento.key == pygame.K_SPACE: 
        print('GAME BEGIN') 
        GAME_BEGIN = True 
        desenha();   
     if evento.type == pygame.KEYDOWN: 
      if evento.key == pygame.K_LEFT: 
        speedX=-3 
        cordX+=speedX 
        desenha() 
     if evento.type == pygame.KEYDOWN: 
      if evento.key == pygame.K_RIGHT: 
        speedX=3 
        cordX+=speedX 
        desenha() 
+0

コードを更新しましたが、同じ問題が残っています:* KEYDOWNを条件文としてキーに設定します – Aury0n

+0

英語でコードを書くと、おそらくもっと多くの人が役に立ちます。また、同じ条件をチェックする3つのif文を使用しています。すべてのコードを1つのif文の下に置くことができます。 Pythonは通常、行の最後にセミコロン( ';')を使用しません。あなたの場合は、それらをすべてあなたのプログラムから削除することができます。 –

+0

また、スクリプトの問題は何ですか?あなたは指定する必要があります。私が見ることができる問題は、コードの構造です。たぶんあなたはいくつかのチュートリアルを最初にチェックアウトする必要がありますか? [ここにあなたが始めるための簡単な情報があります](http://stackoverflow.com/documentation/pygame/3959/introduction-to-pygame/14697/a-simple-game#t=201610121006455484266) –

答えて

0

押したキーを保持したときに、キーがイベントやpygame.event.get()戻り、空のリストを生成しないので、あなたはそうforは何もしませんfor eventoループでget_pressed()を使用することはできません。 (押したキーを維持する場合)

キーを押して起動すると、キーを押すことを止めると、システムは、単一でもKEYDOWNを生成し、その後、システムは、単一でもKEYUP生成しますが、システムは、この2つのモーメント間KEYDOWイベントを生成しません。

forループの後にget_pressed()(およびその他のコード)を使用する必要があります。

for evento in pygame.event.get(): 
    print(evento) 
    if evento.type == pygame.QUIT: 
      JogoAtivo = False 
      pygame.quit(); 

# after for loop 

pressed_keys = pygame.key.get_pressed() 

if pressed_keys[pygame.K_SPACE]: 
      print('GAME BEGIN') 
      GAME_BEGIN = True 
      desenha();   
if pressed_keys[pygame.K_LEFT] and GAME_BEGIN: 
       speedX=-3 
       cordX+=speedX 
       desenha() 
if pressed_keys[pygame.K_RIGHT] and GAME_BEGIN: 
       speedX=3 
       cordX+=speedX 
       desenha() 

または(多かれ少なかれ)

for evento in pygame.event.get(): 
    print(evento) 
    #verifica se o evento que veio eh para fechar a janela 
    if evento.type == pygame.QUIT: 
      JogoAtivo = False 
      pygame.quit(); 
    elif evento.type == pygame.KEYDOWN: 
     if evento.key == pygame.K_SPACE: 
       print('GAME BEGIN') 
       GAME_BEGIN = True 
     elif evento.key == pygame.K_LEFT: 
       speedX = -3 
     elif evento.key == pygame.K_RIGHT: 
       speedX = 3 
    elif evento.type == pygame.KEYUP: 
     if evento.key in (pygame.K_LEFT, pygame.K_RIGHT): 
       speedX = 0 


# after loop 

if GAME_BEGIN: 
    cordX += speedX     
    desenha() 
0

私が理解から、(私が間違っている場合、私はあなたが尋ねかなり理解ではないかもしれないが、私を修正)が、それは何のように見えますキーを押したままにしておくと、キーを押したままにしておくと、キーを押したままにして、キーを押し続けると、キーを押し続けることができます。パイゲームでは、これは動作しませんが、のキーを別の方法で押さえることができます。考えてみましょう:キーを押し続けると、KEYDOWNイベントが作成されます。そのキーを放すと、KEYUPイベントが生成されます。したがって、キーはの後にのキーを押し下げて、の前にの前に押されています。次のコードは、例を通じて概念を説明します

import pygame, sys, time 
pygame.init() 
screen = pygame.display.set_mode([640, 480]) 
a_pressed = False 

while 1: 
    time.sleep(.2) 
    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      pygame.quit() 
      sys.exit() 
     if event.type == pygame.KEYDOWN: 
      if event.key == pygame.K_a: 
       a_pressed = True 
     if event.type == pygame.KEYUP: 
      if event.key == pygame.K_a: 
       a_pressed = False 
    if a_pressed == True: 
     print '"A" is currently being pressed down.' 

私は(学校のコンピュータを使用して)コードをテストすることができていないが、あなたは、「A」キーを押している間、これは上記のメッセージを印刷する必要があり、で約5回/秒(これはfpsを制限する怠惰な方法です)。同じことがすべてのキーに適用されるだけでなく、マウスでドラッグされます。

関連する問題