python – pygame – 敌人在与地面相撞时飞离屏幕?

python – pygame – 敌人在与地面相撞时飞离屏幕?,第1张

概述这是第一次发布海报. 我试着尽量保持这个简单.我试图在pygame中制作游戏,但似乎我的碰撞检测正在起作用.我有一个玩家类,可以检测玩家是否与地面或环境列表中的任何其他对象发生碰撞,并且我有一个敌人类与同一列表中的任何内容发生碰撞.敌人会找出他们需要前往的方向,以便尝试击中玩家.重力很可能在问题中发挥重要作用. 问题是,当“苍蝇”被放入并落到地面时,它们立即跳出屏幕,即使它们的X和Y值(根据屏幕上 这是第一次发布海报.

我试着尽量保持这个简单.我试图在pygame中制作游戏,但似乎我的碰撞检测正在起作用.我有一个玩家类,可以检测玩家是否与地面或环境列表中的任何其他对象发生碰撞,并且我有一个敌人类与同一列表中的任何内容发生碰撞.敌人会找出他们需要前往的方向,以便尝试击中玩家.重力很可能在问题中发挥重要作用.

问题是,当“苍蝇”被放入并落到地面时,它们立即跳出屏幕,即使它们的X和Y值(根据屏幕上的项目记录)看起来根本不移动?

作为澄清,两个“苍蝇”被放入次要列表以允许碰撞检测.另外,作为旁注,如果没有左右碰撞检测,则不会出现“故障”…感谢任何可以提供帮助的人:)

def collisions():#Detection Working as intended    for fly in Fly.List:        fly_proj = pygame.sprite.spritecollIDe(fly,Projectile.List,True)        if len(fly_proj) > 0:            for hit in fly_proj:                fly.health -= 100        X = pygame.sprite.spritecollIDe(fly,current_level.object_List,False)        if len(X) == 0: #Gravity here:            if (fly.vspeed == 0):                fly.vspeed = 1                print("Gravity")            else:                fly.vspeed += 0.35        if len(X) > 1:             for hit in X:                if fly.vspeed > 0:                                fly.rect.bottom = hit.rect.top +1                    fly.vspeed = 0                elif fly.vspeed < 0:                        fly.rect.top = hit.rect.bottom -1                elif fly.hspeed > 0:                    fly.rect.right = hit.rect.left                    fly.hspeed = 0                elif fly.hspeed < 0:                                fly.rect.left = hit.rect.right                    fly.hspeed = 0        print(len(X),framecounter,fly.vspeed,fly.hspeed)#Kill fly if health reaches 0                    if fly.health <= 0:            fly.destroy(Fly) #Detect where the player is        if window_rect.contains(fly.rect):            fly.playersnapshot = player.rect.x        if fly.rect.x - player.rect.x >= -10:            #print("leftING")            fly.hspeed = -2        if fly.rect.x - player.rect.x <= 10:            fly.hspeed = 2        fly.truefalse = True        event = None        fly.rect.y += fly.vspeed        fly.rect.x += fly.hspeed
解决方法 我认为你的if / else是不正确的.

可能在飞行触地时你将vspeed设置为零,然后if / else检查hspeed并使用左/右地面来改变左/右飞行.

我知道一种方法.

>垂直移动
>检查碰撞并使用if / else和vspeed
>水平移动
>检查碰撞并使用if / else和hspeed

编辑:

# move horizontally only fly.rect.x += fly.hspeed X = pygame.sprite.spritecollIDe( ... ) for hit in X:     if fly.hspeed > 0:         fly.rect.right = hit.rect.left     else:         fly.rect.left = hit.rect.right # move vertically only fly.rect.y += fly.vspeed X = pygame.sprite.spritecollIDe( ... ) for hit in X:     if fly.vspeed > 0:         fly.rect.bottom = hit.rect.top     else:         fly.rect.top = hit.rect.bottom     # on_ground = True

我在ProgramArcadeGames.com的源代码“Platform Jumper”中找到了这个方法

见页面:platform_jumper.py

总结

以上是内存溢出为你收集整理的python – pygame – 敌人在与地面相撞飞离屏幕?全部内容,希望文章能够帮你解决python – pygame – 敌人在与地面相撞时飞离屏幕?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1197506.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存