gpt4 book ai didi

iphone - 如何在 Box2D 中同时检测三个物体之间的碰撞?

转载 作者:行者123 更新时间:2023-12-03 21:07:50 25 4
gpt4 key购买 nike

我是 Objective-C 新手。我目前正在使用 Cocos2D 和 Box2D 开发游戏。我的问题是,当 3 个物体碰撞在一起时,游戏崩溃。现在让我详细描述一下我的游戏:

在我的游戏中,我有一个主角站在建筑物的顶部。大楼下面就是这条路。敌人以不同的随机速度经过道路,从右侧进入屏幕并从左侧退出。我将敌人创建为 b2_kinematicBodies,并使用 SetLinearVelocity() 为每个敌人设置随机速度。主角射击敌人。射弹(被射击的物体)是一个b2_dynamicBody。当弹丸击中敌人时,弹丸和敌人都会被摧毁。在游戏过程中,有时低速移动的敌人会与高速移动的敌人交叉。如果射弹正好击中两个敌人重叠的位置,并且其中一个即将超过另一个,游戏就会崩溃!请帮我解决这个问题。

我使用 b2contactListener 类检测到碰撞。

我之前没有提到的一件事是,我没有将敌人创建为单独的不同实体。相反,我创建它一次并使其移动,然后在 init 内调用此方法(创建敌人并使其移动),如下所示:

[self schedule:@selector(addRightTarget) interval:2.0];

最佳答案

我认为问题在于冲突是在处理程序收到任何调用之前计算的。这意味着当你的处理程序被调用时,子弹已经击中了 2 个物体。因此您会收到 2 个回调,如下所示。

检测到碰撞:子弹 + Enemy1

  • 消灭敌人1
  • 摧毁子弹

检测到碰撞:子弹 + Enemy2

  • 消灭敌人2
  • 摧毁子弹 [CRAAAASH!!!您刚刚尝试删除一个不存在的对象]

第一:除了步骤函数之外,您不应该删除任何内容(正如有人在另一个答案中提到的那样)

第二:选择以下之一:

  • 使要删除的对象列表/数组成为一个“集合”或以避免重复的方式实现。
  • 检查世界上是否存在您的对象

关于iphone - 如何在 Box2D 中同时检测三个物体之间的碰撞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5416983/

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