actionscript-3 – 如何以干净,易于管理的方式跟踪我的所有Box2D
我正在使用Box2D第一次认真对待我正在制作的中型Flash游戏.我目前使用Box2D的经验仅限于创建一个世界,身体并以功能性方式将这些身体添加到世界.
我发现将Box2D集成到我的游戏环境中很容易,维护编写良好的代码并完成了一些处理碰撞的教程.我现在面临的问题是我的游戏会有很多身体,每个身体都以不同的方式与其他身体互动,而且我发现很难编写自己的b2ContactListener子类而不会变得非常混乱. 基于我使用的教程,我创建了自己的b2ContactListener子类,并添加了BeginContact()方法的覆盖. BeginContact()在调用时接收的参数将引用b2Contact的一个实例,通过它我可以访问两个b2Fixture实例(两个已经冲突的实例).然后,我可以访问与每个b2Fixtures相关联的b2Body实例. >问题:目前我有找到了什么两样东西相撞的一种迂回的方式(即无论他们是一堵墙和导弹,或播放机和一棵树等),使用GetUserData(),看起来像这样作为一个例子: var f1Player:Boolean = contact.GetFixtureA().GetBody().GetUserData() is Player var f2Player:Boolean = contact.GetFixtureB().GetBody().GetUserData() is Player var f1Tree:Boolean = contact.GetFixtureA().GetBody().GetUserData() is Tree var f2Tree:Boolean = contact.GetFixtureB().GetBody().GetUserData() is Tree // ... continutes with all possible combinations. // Example of managing a collision: if(f1Player && f2Tree) { // Player (FixtureA) and Tree (FixtureB) } if(f2Player && f1Tree) { // Player (FixtureB) and Tree (FixtureA) } 正如你所看到的,这将是非常漫长和无法管理的.我还必须编写每组动作执行两次以满足某个元素为FixtureA或FixtureB,反之亦然(显然是以函数调用的形式,参数交换而不是字面重写). 这显然不是正确的方法,但我无法找到更全面解释碰撞检测管理的资源. 有没有人有使用Box2D可以共享的碰撞检测管理经验?另外,正在使用SetUserData(entityThatOwnsTheBody);使用该方法的正确方法是什么? 解决方法
是的,这确实有点令人讨厌.实际上我认为你拥有它的方式很典型.
fwiw Box2D在测试夹具是否重叠时必须处理类似的问题.有一堆功能,如b2CollideCircles,b2CollidePolygonAndCircle,b2CollidePolygons等,当两个灯具相互靠近时,引擎会选择应该使用哪些功能. 它通过将函数指针放在一个二维数组中,然后使用两个形状类型作为索引来查找此数组中的相应函数.有关详细信息,请参阅b2Contact.cpp中的前三个函数. 当然,如果你不能在AS3中传递这样的函数引用,那么我猜这个答案没有多大帮助,但我想我会发帖,因为C/C++ / JS用户可能会来. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 自动或手动向C/C++头文件添加一些注释
- objective-c – isRegisteredForRemoteNotifications始终返
- c# – 在ListView中加载Databind DropDownList
- 提供几个常用的C#字符串操作函数代码
- C# – 为什么在字段初始值设定项中无法访问’this’?
- (转)DIP(Dependency Inversion Principles):依赖倒置原则
- 为什么我的C输出可执行文件这么大?
- React.js 小书 Lesson6 - 使用 JSX 描述 UI 信息
- Oracle云负责人Shawn Price死于癌症,年仅53岁
- XML-RPC, SOAP 的区别