gpt4 book ai didi

python - pygame - 敌人在与地面碰撞时飞出屏幕?

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:56 33 4
gpt4 key购买 nike

这里是第一次张贴。

我会尽量保持简单。我正在尝试在 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 并使用地面 left/right 改变飞行 left/right

我知道一种方法。

  1. 垂直移动
  2. 检查碰撞并使用 if/elsevspeed
  3. 水平移动飞行
  4. 检查碰撞并使用 if/elsehspeed

--

编辑:

 # 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 - 敌人在与地面碰撞时飞出屏幕?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34771378/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com