我有一个 sprite 代表我在 pygame 中的游戏玩家,但他们向左移动的速度都比向右移动的快。
我的代码的重要部分:
class Player(pygame.sprite.Sprite):
def __init__(self,
name,
width,
height,
image=None,
keys=dict(left=pygame.K_a, right=pygame.K_d, up=pygame.K_w, down=pygame.K_s),
jump_height=2.55,
move_speed=1.5,
pos=(0, 0)):
super().__init__()
self.name = name
if image is None:
self.rect = pygame.Rect(pos, (width, height))
else:
self.rect = pygame.Rect(pos, (width, height))
self.image = pygame.Surface((width, height))
self.image.fill(image)
self.keys = keys
self.width = width
self.height = height
self.pos = pos
self.rect.topleft = pos
self.VX = 0
self.VY = 0
self.jump_height = jump_height
self.move_speed = move_speed
self.haveJumped = False
self.wins = 0
def move(self):
self.VX = 0.0
pressed = pygame.key.get_pressed()
if pressed[self.keys["left"]]:
self.VX = -self.move_speed
if self.rect.left > 0:
self.rect.left += self.VX
if pressed[self.keys["right"]]:
self.VX = self.move_speed
if self.rect.right < windowWidth:
self.rect.right += self.VX
有人能告诉我为什么我的球员向左移动得更快以及如何解决这个问题吗?
最佳答案
根据 Rect docs :
The coordinates for Rect objects are all integers.
Pygame 的 Rect 是用来处理像素的,而你的 move_speed
是 1.5
,所以
if pressed[self.keys["left"]]:
self.VX = -self.move_speed
if self.rect.left > 0:
self.rect.left += self.VX
将你的矩形 2
向左移动,然后
if pressed[self.keys["right"]]:
self.VX = self.move_speed
if self.rect.right < windowWidth:
self.rect.right += self.VX
将您的矩形 1
向右移动。
您应该在类中使用其他一些变量来存储对象的位置。您可以使用已经存在的 pos
属性:
class Player(pygame.sprite.Sprite):
def __init__(self,
name,
width,
height,
image=None,
keys=dict(left=pygame.K_a, right=pygame.K_d, up=pygame.K_w, down=pygame.K_s),
jump_height=2.55,
move_speed=1.5,
pos=(0, 0)):
super().__init__()
self.name = name
if image is None:
self.rect = pygame.Rect(pos, (width, height))
else:
self.rect = pygame.Rect(pos, (width, height))
self.image = pygame.Surface((width, height))
self.image.fill(image)
self.keys = keys
self.width = width
self.height = height
self.pos = pos
self.rect.topleft = pos
self.VX = 0
self.VY = 0
self.jump_height = jump_height
self.move_speed = move_speed
self.haveJumped = False
self.wins = 0
def move(self):
self.VX = 0.0
pressed = pygame.key.get_pressed()
if pressed[self.keys["left"]]:
self.VX = -self.move_speed
if self.pos[0] > 0:
self.pos[0] += self.VX
if pressed[self.keys["right"]]:
self.VX = self.move_speed
if (self.pos[0] + self.width) < windowWidth:
self.pos[0] += self.VX
但请注意,您需要相应地更改渲染代码。
关于python - 为什么我的 pygame Sprite 左边比右边快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56799560/