繁体   English   中英

Libgdx中的碰撞检测管理

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM