【问题标题】:Pygame jump issuePygame 跳转问题
【发布时间】:2021-04-18 13:50:56
【问题描述】:

我正在通过开发平台游戏来学习 pygame 模块。

我从这个 Youtube 视频和频道中获得灵感

跳跃行为和问题

我可以处理玩家如果不在平台上就不能跳跃。

但我发现当我同时按下左键或右键和跳转键 跳转值是两倍它应该是什么。

我有一个类Game 处理主游戏循环和另外两个精灵类PlayerPlatform

Game

Game 类中,我有一个方法update,我在其中检查platformsplayer 之间的冲突。

class Game:
    # game main loop 
    def __init__(self):
        # ...
        self.hits = None
        # ...

    def update(self):

        # update all sprites in the sprites group
        self.all_sprites.update(self.all_events, self.hits)

        # check collision between player and platforms
        self.hits = pygame.sprite.spritecollide(self.player, self.platforms, False)
        if self.hits:
            self.player.rect.bottom = self.hits[0].rect.top

Player

Player类中,我使用碰撞列表,并且仅当玩家与平台发生碰撞时才跳转:

class Player(pygame.sprite.Sprite):
    # player class
    def __init__(self):
        #...

    def update(self, events, hits):
        keystate = pygame.key.get_pressed()            
        self.move_player(keystate)
        self.apply_gravity()
        self.jump(keystate, events, hits)

    def jump(keystate, events, hits):
        for event in events:
            if event.type == pygame.KEYDOWN:
                if keystate[KEYS[self.player_data["jump"]]] and hits:
                    self.rect.y -= self.player_data["jumpPower"]

您可以找到whole project code on github

我在animated gif 上捕获了这个问题:

  • 当我同时按下两个键时,跳跃太高了

你知道如何解决这种奇怪的行为吗?

【问题讨论】:

标签: python pygame event-handling keypress


【解决方案1】:

问题是在您的jump 方法中,您没有检查玩家是否按下了跳转按钮event.key == KEYS[self.player_data["jump"]]

但是如果 any 按钮被按下并且 jump 按钮 被按住怎么办?!这意味着,如果您设法在同一帧上按下两个按钮,您的位置就会减少两次。

要修复,检查事件是否是跳转按钮

def jump(keystate, events, hits):
    for event in events:
        if event.type == pygame.KEYDOWN:
            if event.key == KEYS[self.player_data["jump"]] and hits:
                self.rect.y -= self.player_data["jumpPower"]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-07
    • 2011-02-05
    相关资源
    最近更新 更多