我正在尝试创建一个“玩家”-黑色方块-当你按住WASD的时候它就会移动。我试着在这里、谷歌和youtube上寻找如何让它工作,但我尝试的每一个解决方案都有相同的问题:我不是在按住键的同时移动它,而是不断地敲击键,让它以很小的速度移动。我不知道我做错了什么。下面是代码(使用python 3.3 -pygame1.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上找到的几个解决方案,但都不起作用。我认为代码中还存在其他错误。
发布于 2013-05-19 00:17:49
你的代码有两个问题。首先回答你的问题。玩家从不移动超过一步的原因是,当您这样做时,您会在每次调用draw()时重置玩家的位置
playerx = 20
playery = 20相反,您应该将代码放在draw()函数之上并添加
global playerx
global playery在draw()的顶部。现在,播放器的位置并不是每一帧都会重置。
第二个问题是,每次调用draw()时都会创建一个新屏幕
screen = pygame.display.set_mode((700,300))
pygame.display.set_caption('something')取而代之的是,你应该把它们移到draw()上面的线上,并且每次绘制都使用相同的屏幕。
此外,正如elyase指出的那样,您可能希望将速度设置为固定值,而不是增加它们。就像这样
velX = 0
velY = 0
if keys_down[K_d]:
velX = 10
if keys_down[K_w]:
velY = -10
if keys_down[K_s]:
velY = 10
if keys_down[K_a]:
velX = -10这样,玩家就会在你控制的方向上以恒定的速度移动。
希望这能澄清一些事情。:)
发布于 2013-05-19 00:10:24
您正在重置draw()中的位置。此外,您还应该将更改方向的代码放在event.type == pygame.KEYDOWN条件中。如下所示:
if event.type == KEYDOWN:
if event.key == K_d:
velX += 50*time
elif event.key == K_w:
velY -= 50*time
...
if event.type == KEYUP:
# set velocity to 0https://stackoverflow.com/questions/16626143
复制相似问题