python - 为什么我的 pygame Sprite 左边比右边快?

标签 python python-3.x pygame

我有一个 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_speed1.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/

相关文章:

python - 运行 docker-compose up 时出现 Errno 13

python - Python 3 中的 For 循环

python - pygame-如何使屏幕变暗

python - 为什么我不能覆盖默认参数?

python - 事件后 pygame

python - 有没有办法在 Pymunk 中实现静摩擦力

python - 使用 pytest 时不会加载图像 Assets

python - python中的SQLite3更新错误

python - matplotlib 中的 MPLCCONFIGDIR 错误

python - 如何在 Python 中从图像 url 创建拼贴画