在pygame中按住键时,如何切换到持续移动?

在pygame中按住键时,如何切换到持续移动?,pygame,python-3.5,Pygame,Python 3.5,下面的代码设置为,当化身在屏幕上闪烁时,按下空格键或向上键,它会移动一次,但当按下时,它不会一直向上移动(在空中)。我需要更改我的代码,这样当按下键时,移动是恒定的 import pygame, sys, time, random from pygame.locals import * class Player(Duck): """The player controlled Duck""" def __init__(self, x, y, width, height):

下面的代码设置为,当化身在屏幕上闪烁时,按下空格键或向上键,它会移动一次,但当按下时,它不会一直向上移动(在空中)。我需要更改我的代码,这样当按下键时,移动是恒定的

import pygame, sys, time, random
from pygame.locals import *

class Player(Duck):
    """The player controlled Duck"""


    def __init__(self, x, y, width, height):
        super(Player, self).__init__(x, y, width, height)

        # How many pixels the Player duck should move on a given frame.
        self.y_change = 0
        # How many pixels the spaceship should move each frame a key is pressed.
        self.y_dist = 50


    def MoveKeyDown(self, key):
        """Responds to a key-down event and moves accordingly"""

        if (key == pygame.K_UP or key == K_SPACE):
            self.rect.y -= self.y_dist
    def MoveKeyUp(self, key):
        """Responds to a key-up event and stops movement accordingly"""

        if (key == pygame.K_UP or key == K_SPACE):
            self.rect.y -= self.y_dist


    def update(self):
        """
        Moves the Spaceship while ensuring it stays in bounds
        """
        # Moves it relative to its current location.
        self.rect.move_ip(self.y_change, 0)

        # If the Spaceship moves off the screen, put it back on.
        if self.rect.y <= 0:
            self.rect.y = 0
        elif self.rect.y > window_width:
            self.rect.y = window_width

while True:  # the main game loop
    for event in pygame.event.get(): #Closes game
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.KEYUP:
            player.MoveKeyUp(event.key)
        elif event.type == pygame.KEYDOWN:
            player.MoveKeyDown(event.key)
导入pygame、sys、time、random
从pygame.locals导入*
班级运动员(鸭子):
“玩家控制鸭子”
定义初始值(自、x、y、宽度、高度):
超级(玩家,自我)。\uuuu初始(x,y,宽度,高度)
#玩家鸭子在给定帧上移动的像素数。
self.y_change=0
#当按下一个键时,宇宙飞船应该移动每一帧多少像素。
self.y_dist=50
def MoveKeyDown(自动,按键):
“”“响应按键按下事件并相应移动”“”
如果(key==pygame.K_UP或key==K_空格):
self.rect.y-=self.y\u dist
def MoveKeyUp(自我,钥匙):
“”“响应向上键事件并相应地停止移动”“”
如果(key==pygame.K_UP或key==K_空格):
self.rect.y-=self.y\u dist
def更新(自我):
"""
移动宇宙飞船,同时确保其处于边界内
"""
#相对于其当前位置移动它。
self.rect.move\u ip(self.y\u change,0)
#如果太空船离开屏幕,就把它放回去。
如果自校正y窗口的宽度:
self.rect.y=窗口宽度
虽然正确:#主游戏循环
对于pygame.event.get()中的事件:#关闭游戏
如果event.type==退出:
pygame.quit()
sys.exit()
elif event.type==pygame.KEYUP:
player.MoveKeyUp(event.key)
elif event.type==pygame.KEYDOWN:
player.MoveKeyDown(event.key)

MoveKeyDown
方法中,您必须将
self.y\u change
值设置为所需速度,而不是调整
self.rect.y
值。
update
方法中的
self.rect.move\u ip
调用将移动精灵。您必须在主while循环中的每一帧调用
update
方法

def __init__(self, x, y, width, height):
    super(Player, self).__init__(x, y, width, height)
    # How many pixels the Player duck should move on a given frame.
    self.x_change = 0
    self.y_change = 0
    # How many pixels the spaceship should move each frame a key is pressed.
    self.speed = 50

def MoveKeyDown(self, key):
    """Responds to a key-down event and moves accordingly."""
    if key in (pygame.K_UP, pygame.K_SPACE):
        self.y_change = -self.speed

def MoveKeyUp(self, key):
    if key in (pygame.K_UP, pygame.K_SPACE) and self.y_change < 0:
        self.y_change = 0

def update(self):
    self.rect.move_ip(self.x_change, self.y_change)
def\uuuuu init\uuuuuuu(self,x,y,width,height):
超级(玩家,自我)。\uuuu初始(x,y,宽度,高度)
#玩家鸭子在给定帧上移动的像素数。
self.x_change=0
self.y_change=0
#当按下一个键时,宇宙飞船应该移动每一帧多少像素。
自身速度=50
def MoveKeyDown(自动,按键):
“”“响应按键按下事件并相应地移动。”“”
如果输入(pygame.K_UP,pygame.K_空格):
self.y_change=-self.speed
def MoveKeyUp(自我,钥匙):
如果输入(pygame.K_UP,pygame.K_SPACE)和self.y_change<0:
self.y_change=0
def更新(自我):
self.rect.move\u ip(self.x\u change,self.y\u change)

MoveKeyDown
方法中,您必须将
self.y\u change
值设置为所需速度,而不是调整
self.rect.y
值。
update
方法中的
self.rect.move\u ip
调用将移动精灵。您必须在主while循环中的每一帧调用
update
方法

def __init__(self, x, y, width, height):
    super(Player, self).__init__(x, y, width, height)
    # How many pixels the Player duck should move on a given frame.
    self.x_change = 0
    self.y_change = 0
    # How many pixels the spaceship should move each frame a key is pressed.
    self.speed = 50

def MoveKeyDown(self, key):
    """Responds to a key-down event and moves accordingly."""
    if key in (pygame.K_UP, pygame.K_SPACE):
        self.y_change = -self.speed

def MoveKeyUp(self, key):
    if key in (pygame.K_UP, pygame.K_SPACE) and self.y_change < 0:
        self.y_change = 0

def update(self):
    self.rect.move_ip(self.x_change, self.y_change)
def\uuuuu init\uuuuuuu(self,x,y,width,height):
超级(玩家,自我)。\uuuu初始(x,y,宽度,高度)
#玩家鸭子在给定帧上移动的像素数。
self.x_change=0
self.y_change=0
#当按下一个键时,宇宙飞船应该移动每一帧多少像素。
自身速度=50
def MoveKeyDown(自动,按键):
“”“响应按键按下事件并相应地移动。”“”
如果输入(pygame.K_UP,pygame.K_空格):
self.y_change=-self.speed
def MoveKeyUp(自我,钥匙):
如果输入(pygame.K_UP,pygame.K_SPACE)和self.y_change<0:
self.y_change=0
def更新(自我):
self.rect.move\u ip(self.x\u change,self.y\u change)

即使它是以主题外的形式关闭的,答案也应该是有帮助的:请提供一个。我们想要一些不需要调整就可以运行的示例。即使它是作为主题关闭的,但答案应该是有帮助的:请提供一个示例。我们想要的例子,我们可以运行没有调整。