0

WASDを押し続けると動く「プレーヤー」(黒い四角)を作成しようとしています。この作業を行う方法について、グーグルとユーチューブでこのあたりを見てみましたが、私が試したすべての解決策には同じ問題があります。キーを押したまま移動するのではなく、常にキーをタップしてそれは少しずつ動きます。何が間違っているのかわかりません。コードは次のとおりです(python 3.3 - pygame 1.9を使用):

import pygame
from pygame.locals import *
from pygame.time import *
import sys
pygame.init()

velX = 0
velY = 0


running = True
clock = pygame.time.Clock()

def draw():
    global velX
    global velY

    playerx = 20
    playery = 20

    screen = pygame.display.set_mode((700,300))
    pygame.display.set_caption('something')

    background = pygame.Surface(screen.get_size())
    background = background.convert()
    background.fill((255,255,255))
    screen.blit(background, (0,0))

    playerx = playerx + velX
    playery = playery + velY
    player_filename = 'player.png'
    player = pygame.image.load(player_filename)
    screen.blit(player, (playerx,playery))

    pygame.display.flip()

def main():
    global velX
    global velY
    global running

    while running:

        keys_down = pygame.key.get_pressed()
        pygame.key.set_repeat(1, 50)
        time = 50/1000

        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    running=False

        if keys_down[K_d]:
            velX += 50*time
        if keys_down[K_w]:
            velY -= 50*time
        if keys_down[K_s]:
            velY += 50*time
        if keys_down[K_a]:
            velX -= 50*time

        clock.tick(50)
        draw()

if __name__ == '__main__':
    main()

すでに set repeat コマンドを試しましたが、あまり効果がないように見えました。また、stackoverflow で見つけたいくつかのソリューションから直接コピーしようとしましたが、どれも機能しませんでした。コードに何か他の問題があると思います。

4

2 に答える 2