python - 保持移动直到按键被按下(重复)
问题描述
我正在改造蛇作为一项挑战,但我无法让蛇连续朝一个方向移动。
我重新做了运动以更好地工作,这就是我现在所拥有的:
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
不会沿着屏幕连续移动矩形。
我想要一个持续移动它直到按下一个键的解决方案。
解决方案
要使移动一直持续到按下另一个键(使用类似于您所做的操作),您可以使用一个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
一些额外的注意事项:
尝试确保有一个事件循环。如果您的事件处理代码太长,请放入单独的函数中。- 您谈到的速度问题可能是由于在屏幕上绘制了很多小图像引起的,您可能需要验证这一点
- 当玩家试图退出屏幕时,你会处理这些情况吗?
推荐阅读
- python - 使用“空格”字符导入 python 模块目录
- php - 从sql视图中选择时如何在laravel中修复“准备好的语句需要重新准备”
- java - 如何在线创建和验证 onedrive 或 sharepoint 的 webhook?
- json - REST API:更新 JSON 对象数组的最佳实践
- java - 在文件中的每个单词后添加空格(Java)
- python - 访问 Python 虚拟环境
- javascript - 如何在完整的日历 js 中将事件呈现到整个单元格?
- .net - 同时列出和上传 Blob
- c# - 将项目添加到我的数据库(DBContext - EF)时,它会将这些项目添加到表中的随机位置,而不是一个接一个地添加。出了什么问题?
- javascript - 如何在不使用 Javascript 在 firebase 中删除集合本身的情况下从集合中删除所有文档?