保持运动直到按键被按下(重复)

时间:2019-02-24 19:21:25

标签: python python-3.x pygame

THIS ANSWER IS A DUPLICATE

我正在挑战蛇,但我无法让蛇连续向一个方向移动。

我重新努力使机芯工作得更好,这就是我现在所拥有的:

$ sort file.txt
aaa@aaa.com
aba@aaa.com
aba@abb.com
abc@abc.com
abc@abc.net
bbb@aaa.org
ccc@abb.com

当前

import pygame
from pygame.locals import *
pygame.init()
RED = (240, 0, 0)
x = y = 0
sizex = sizey = 600
screen = pygame.display.set_mode((sizex,sizey))

clock = pygame.time.Clock()
while True:
    for event in pygame.event.get():
        if event.type == KEYDOWN:  # 
            if event.key == K_LEFT:
                    x -= 25
            elif event.key == K_RIGHT:
                    x += 25
            elif event.key == K_UP:
                    y -= 25
            elif event.key == K_DOWN:
                    y += 25

    pygame.draw.rect(screen, RED, pygame.Rect(x,y,tilesize,tilesize))
    pygame.display.flip()
    clock.tick(100)

不会在屏幕上连续移动矩形。

我想要一种解决方案,可以一直将其移动到按下键为止。

1 个答案:

答案 0 :(得分:1)

要使运动一直进行到按下另一个键(使用类似的操作)之前,可以使用velocity变量来存储当前方向的速度(取决于您的个人喜好,可以是列表,元组,两个变量或您自己的class Velocity)。

按下一个键时,将相应的速度设置为“移动”值,将所有其他速度设置为零。

# x and y are the respective positions when drawing; we are currently inside the event-handling loop
if event.type == KEYDOWN:
    vel_x = vel_y = 0  # if you only want this to happen for arrow keys, do it here
    if event.key == K_UP:
        vel_y = -5
    elif event.key == K_DOWN:
        vel_y = 5
    ...

在循环之后,在绘制之前:

x += vel_x
y += vel_y
# you might want to check we're not outside the screen here

一些注意事项:

  • 尝试确保具有 一个事件循环。如果您的事件处理代码太长,请放入单独的函数中。
  • 您谈论的速度问题可能是由于在屏幕上绘制了很多小图像引起的,您可能需要对此进行验证
  • 您能处理播放器尝试退出屏幕的情况吗?