python - 在pygame中使用箭头键更新精灵位置
问题描述
当按下箭头键(左右)时,我试图让精灵移动,但没有发生任何事情。我一直试图让这个工作,但我无法做到。精灵被绘制,但它没有移动,它只是停留在那里。这是代码:
import pygame
pygame.init()
class Player(pygame.sprite.Sprite):
def __init__(self, x, y):
pygame.sprite.Sprite.__init__(self)
self.sprites = []
self.sprites.append(pygame.image.load('Sprites/Player/running1.png'))
self.sprites.append(pygame.image.load('Sprites/Player/running2.png'))
self.sprites.append(pygame.image.load('Sprites/Player/running3.png'))
self.sprites.append(pygame.image.load('Sprites/Player/running4.png'))
self.sprites.append(pygame.image.load('Sprites/Player/running5.png'))
self.sprites.append(pygame.image.load('Sprites/Player/running6.png'))
self.current_sprite = 0
self.image = self.sprites[self.current_sprite]
self.rect = self.image.get_rect()
self.rect.topleft = [x,y]
self.x = self.rect.x
self.y = self.rect.y
self.walking = False
self.vel = 5
def walk(self):
self.walking = True
def update(self):
if self.walking == True:
self.current_sprite += 1
if self.current_sprite >= len(self.sprites):
self.current_sprite = 0
self.walking = False
self.image = self.sprites[self.current_sprite]
sWidth = 800
sHeight = 400
screen = pygame.display.set_mode((sWidth,sHeight))
pygame.display.set_caption("Game")
background = pygame.image.load('Sprites/Background/bg1.jpg')
allSprites = pygame.sprite.Group()
player = Player(300,230)
allSprites.add(player)
clock = pygame.time.Clock()
keepGoing = True
while keepGoing:
clock.tick(20)
for event in pygame.event.get():
if event.type == pygame.QUIT:
keepGoing = False
现在,我想让它在我按下箭头键时移动。
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.x -= player.vel
elif keys[pygame.K_RIGHT]:
player.x += player.vel
else:
player.walking = False
screen.blit(background, (0,0))
allSprites.draw(background)
allSprites.update()
pygame.display.flip()
解决方案
玩家的位置存储在self.rect
. 该rect
属性用于pygame.sprite.Group.draw
绘制Sprite。因此,您必须更新player.rect.x
andplayer.rect.y
而不是player.x
and player.y
。x
您根本不需要这些属性y
:
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
player.rect.x -= player.vel
elif keys[pygame.K_RIGHT]:
player.rect.x += player.vel
推荐阅读
- r - 基于单元格值的灵活表脚注
- javascript - 添加新帖子时动态路由不起作用
- azure - Azure B2C 在统一注册/登录流程中首先显示注册页面
- python - TypeError:返回类型必须是字符串、字典、元组、响应实例或 WSGI 可调用的,但它是协程
- python - 使用自定义类作为视图类时出现 RecycleView 错误
- php - PHP - 创建多维数组的最佳实践
- oracle - Aspen SQLPlus:按名称分隔列
- git - git 2.32 git push -u origin master 没有任何反应
- c++ - Gradescope 显示我的代码不正确,问题和代码如下
- b-tree - 为什么一个磁盘块不能存储多个索引树节点