微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的游戏结束代码中的碰撞在 pygame 中无法正常工作

如何解决我的游戏结束代码中的碰撞在 pygame 中无法正常工作

我正在尝试在 pygame 中制作游戏,我几乎完成了。我只是在游戏机制方面遇到问题。 在我通过触摸敌人而死后,我的敌人消失了,我死后将它们发送到 Y=2000,现在它们继续移动,然后在几秒钟后出现。我对音乐的游戏有效,但我对文字的游戏不会。

在我的代码中,我有这个游戏结束代码,因为我想在敌人碰我时输:

# Game Over
if isCollision(enemyX[i],enemyY[i],playerX,playerY):
    for j in range(num_of_enemies):
        enemyY[j] = 2000
    game_over_text()
    break

这行不通,因为我刚才描述的事情发生了。

我尝试更改代码并使用它:

# Game Over
if enemyY[i] > 440:
    for j in range(num_of_enemies):
        enemyY[j] = 2000
    game_over_text()
    break

这行得通,我的游戏胜过文字,游戏胜过声音,我的敌人不会回来了。但这不是我想要的工作方式。

有人对我如何解决这个问题有任何想法吗?

这是我的 iscollision 函数代码

def isCollision(enemyX,enemyY,bulletX,bulletY):
    # Formel for distanse mellom to koordinater
    distance = math.sqrt((math.pow(enemyX-bulletX,2)) + (math.pow(enemyY-bulletY,2)))
    if distance < 30:
        return True
    else:
        return False

它检测到碰撞,但碰撞代码使游戏无法运行。

我的整个代码https://gist.github.com/EkteFrokostNam/a46b8a905ec3d1f190af482887a80341

解决方法

您只能在单帧的文本上绘制游戏。如果要永久显示文本,需要在应用循环中绘制:

def game_over_text():
    over_text = over_font.render("GAME OVER",True,(255,255,255))
    screen.blit(over_text,(200,250))
   
def game_over_sound(): 
    pygame.mixer.music.set_volume(0)
    death_music = mixer.Sound('Death.mp3')
    death_music.set_volume(0.1)
    death_music.play()
game_over = False

# Game loop
running = True 
while running:
    # [...]

    # Enemy movement

    for i in range(num_of_enemies):

        # Game Over
        if isCollision(enemyX[i],enemyY[i],playerX,playerY):
            for j in range(num_of_enemies):
                enemyY[j] = 2000
            game_over_sound()
            game_over = True
            break

    # [...]

    if game_over:
        game_over_text()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。