这是我的代码:为什么矩形不移动?
import pygame
from pygame.locals import *
#define the player
class Player(pygame.sprite.Sprite):
def __init__(self):
super(Player, self).__init__()
self.surf = pygame.Surface((50, 25))
self.surf.fill((255,255,255))
self.rect = self.surf.get_rect()
def update(self, pressed_keys):
"""
if pressed_keys[K_UP]:
self.rect.move_ip(0, -5)
if pressed_keys[K_DOWN]:
self.rect.move_ip(0, 5)
"""
if pressed_keys[K_LEFT]:
self.rect.move_ip(-5, 0)
if pressed_keys[K_RIGHT]:
self.rect.move_ip(5, 0)
#keep player on the screen
if self.rect.left < 0:
self.rect.left = 0
elif self.rect.right > 400:
self.rect.right = 400
#initialization
pygame.init()
#create the screen object
screen = pygame.display.set_mode((400, 600))
#instantiate the player
player = Player()
running = True
#main loop
while running:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_ESCAPE:
running = False
elif event.type == QUIT:
running = False
#draw the player to the screen
screen.blit(player.surf, (200, 550))
pressed_keys = pygame.key.get_pressed()
player.update(pressed_keys)
#update the display
pygame.display.flip()
一切都显示了,但事先我不能用我的箭头键移动矩形没有任何错误显示,帮助..谢谢!我还添加了一个打印来检查pressed的按键是否工作,并在不移动矩形的情况下打印。
非常感谢。不好意思,我该如何确定玩家的位置?再次感谢你。 – Entel
要初始设置精灵位置,请将'self.rect = self.surf.get_rect()'替换为'self.rect = self.surf.get_rect(center =(100,100))'。用'(x,y)'替换元组,''中心'参数可以替换为'topleft','topright','top','bottom' ...你可以在这里找到它们:https ://www.pygame.org/docs/ref/rect.html#pygame.Rect。之后,您可以使用'self.rect.move(x,y)'将精灵移动到'x'和'y'线。或者是任何组合:'self.rect.right = 10'或'self.rect.top = 100' ... – abccd
'您不应该在每个循环中显式使用pygame.key.get_pressed()来检查按键,它会让你的代码变得更慢,并且可能会滞后 - 这是无稽之谈。它不会使代码变慢。 'pygame.key.get_pressed()'是检索密钥状态的正确方法。使用你的代码,你不能再按住键来获得连续的移动。 '设置一个帧速率,这样不会消耗太多内存' - 这也是无稽之谈。你设置一个帧速率,让你的游戏以恒定的速度运行。这与RAM无关...... – sloth