-1

キーを押している間、画像を動かそうとしています。動きますが滑らかではありません。ボタンを押しても動きません。

import pygame, sys
from pygame.locals import *

white=(255,255,255)
black=(0,0,0)

pygame.init()
window=pygame.display.set_mode((640, 360),0,32)
image=pygame.image.load("white.png")
image.set_colorkey(white)

x,y=0,0
movex,movey=0,0

while True:
    window.fill(black)
    for event in pygame.event.get():
        if event.type==QUIT:
            pygame.quit()
            sys.exit()
        if event.type==KEYDOWN:
            if event.key==K_LEFT:
                movex+=-1
            elif event.key==K_RIGHT:
                movex+=1
            elif event.key==K_UP:
                movey+=-1
            elif event.key==K_DOWN:
                movey+=1
    x=movex
    y=movey

    window.blit(image,(x,y))
    pygame.display.update()
4

2 に答える 2

8

イベントを探しているK_DOWNので、画像はボタンが押された瞬間 (または OS から指示されたとき) にのみ移動します。

より良いアイデアは、次を使用して、メインループの各反復で特定のキーが押されているかどうかを確認することですpygame.key.get_pressed()

...
for event in pygame.event.get():
    if event.type==QUIT:
        pygame.quit()
        sys.exit()

pressed = pygame.key.get_pressed()
if pressed[K_LEFT]:
    movex+=-1
if pressed[K_RIGHT]:
    movex+=1
if pressed[K_UP]:
    movey+=-1
if pressed[K_DOWN]:
    movey+=1

x=movex
y=movey
...
于 2013-04-10T06:23:11.777 に答える
-4

ある種の繰り返し機能を有効にする必要があると思います。この(あなたの)例によると、

pygame.key.set_repeat(50, 50)

仕事をするべきです。

引用された説明:

set_repeat()とそれは2つの引数とは何ですか? デフォルトでは、キーリピート機能は無効になっています。つまり、キーを押したままにしたときのデフォルトは何もありません。イベントは生成されません。

set_repeat の 2 つの引数は、遅延と間隔です。キーを押し続けると、delay ミリ秒後に最初のイベントが生成されます。そして、interval ミリ秒後に連続したイベントが生成されます。

それでも混乱する場合は、この例が役立つかもしれません。上キーを押しているとします。これは、イベントの生成がどのように見えるかです。

【1次アップイベント】…【2次アップイベント】…【3次アップイベント】…など。

[1st up event] は、キーを押し続けた場所です。そして delay ミリ秒後に [2nd up event] が生成されます。そして、残りのイベントは、キーが離されるまで間隔ミリ秒ごとに生成されます。

于 2013-04-10T02:33:46.937 に答える