我正在通过开发一个平台游戏来学习游戏模块。
我从这个Youtube视频和频道中获得灵感
跳跃行为与问题
我可以处理的事实是,球员不能跳,如果它不是躺在一个平台上。
但我发现,当我同时按左键或右键和跳转键时,的跳转值是应有的值的两倍。
我有一个类Game,它处理主游戏循环和另外两个精灵类Player和Platform。
类Game
在类Game中,我有一个update方法,在这个方法中,我检查平台和播放器之间的冲突。
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类中,只有当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"]你可以找到github上的整个项目代码。
我在动画gif上捕捉到了这个问题

你知道如何解决这个奇怪的行为吗?
发布于 2021-04-18 14:43:15
问题是,在您的jump方法中,您不检查玩家是否按下跳转按钮:event.key == KEYS[self.player_data["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"]https://stackoverflow.com/questions/67149328
复制相似问题