首页 > 解决方案 > 保持移动直到按键被按下(重复)

问题描述

这个答案是重复的

我正在改造蛇作为一项挑战,但我无法让蛇连续朝一个方向移动。

我重新做了运动以更好地工作,这就是我现在所拥有的:

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)

目前,

elif event.key == K_DOWN:
        y += 25

不会沿着屏幕连续移动矩形。

我想要一个持续移动它直到按下一个键的解决方案。

标签: pythonpython-3.xpygame

解决方案


要使移动一直持续到按下另一个键(使用类似于您所做的操作),您可以使用一个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

一些额外的注意事项:

  • 尝试确保有一个事件循环。如果您的事件处理代码太长,请放入单独的函数中。
  • 您谈到的速度问题可能是由于在屏幕上绘制了很多小图像引起的,您可能需要验证这一点
  • 当玩家试图退出屏幕时,你会处理这些情况吗?

推荐阅读