[英]Collision detection management in Libgdx
阅读以下内容后:
管理碰撞检测
我考虑过如何在libgdx中管理它,因为它支持其他碰撞检测(使用Intersector)和您可以在游戏中使用的其他类。
我具有对象的逻辑及其属性(例如具有移动速度和健康状况的Zombie)以及具有纹理,屏幕上位置等的外观(例如Zombie2d是Actor的子类)。 Zombie2d还具有对Zombie的引用,以具有Zombie的所有属性。 问题:每个Actor都应该引用存储所有其他对象的关卡并自己检测碰撞吗?还是我应该有一个以关卡为参考的Manager?
我应该在Actor.act(delta)方法内部还是Actor.act()和Actor.draw()之间进行碰撞检测?
每个Actor都应该引用存储所有其他对象的Level的引用并自己检测碰撞吗?还是我应该有一个以Level为参考的Manager?
这取决于您的游戏,例如以下游戏: SuperJumper 。
通过非常简单的碰撞(平台/松鼠/硬币/等仅与Bob碰撞,但它们不会相互碰撞)可以轻松地在World类中进行处理。 像这样:
//for example, Bob colliding with squirrels
private void checkSquirrelCollisions(){
int len = squirrels.size();
for (int i = 0; i < len; i++){
Squirrel squirrel = squirrels.get(i);
if (squirrel.bounds.overlaps(bob.bounds)){
bob.hitSquirrel();
listener.hit();
}
}
}
但是,如果一个较复杂的游戏的敌人/子弹/等相互碰撞/墙壁/玩家/等相互碰撞,那么如果每个人都处理自己的碰撞,该编码会找到更清晰的代码。
我应该在Actor.act(delta)方法内部还是在Actor.act()和Actor.draw()之间进行碰撞检测?
好吧,因为碰撞在实体行为中起着重要作用(例如,弹跳,停止运动等)。 将其包含在Actor.act(delta)
方法中会更好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.