【问题标题】:Keep movement until a key is pressed (Duplicate) [closed]保持移动直到按下一个键(重复)[关闭]
【发布时间】:2019-02-24 19:21:25
【问题描述】:

THIS ANSWER IS A DUPLICATE

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

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

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

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

我想要一个解决方案,可以一直移动它直到按下一个键。

【问题讨论】:

  • 请在您的帖子中包含更多解释,谢谢
  • 你的意思是for x, y in screen: 吗?
  • 你有TypeError: 'pygame.Surface' object is not iterable吗?如果是,请将其包含在问题中。如果不是,请详细说明“不工作” - 因错误而崩溃,只是不移动,移动方向错误......
  • 代码相当不同...

标签: python python-3.x pygame


【解决方案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

一些额外的说明:

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

【讨论】:

  • @Glitchd 抱歉,应该是现在。我误解了你想要什么
  • 因此,正确输入此代码后,我可以按一次向下/向上/向左/向右箭头键,它将继续朝那个方向移动?
  • @Glitchd 直到按下另一个键,它应该
  • 好的,谢谢,我明天试试,因为我现在很晚了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 2022-12-31
  • 1970-01-01
  • 2022-12-31
相关资源
最近更新 更多