首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LIBGDX发现哪个物体与其固定装置相撞

LIBGDX发现哪个物体与其固定装置相撞
EN

Stack Overflow用户
提问于 2013-12-22 21:33:31
回答 1查看 689关注 0票数 2

我正在做一个简单的跳投游戏,并且有碰撞的问题。在项目中,我有播放器和平台类。播放机正在重写shouldCollide(治具fixtureA,治具fixtureB)方法。我的问题是,如果有办法获得与fixtureA和fixtureB的球员是否与平台碰撞?我在libgdx的github上看过演示,但是那里的项目(超级跳投)似乎不使用box2D,所以我对如何在我的项目中适当地制造冲突感到很费劲。

我现在的shouldCollide现在看起来如下:

代码语言:javascript
复制
@Override
public boolean shouldCollide(Fixture fixtureA, Fixture fixtureB) {
    if(fixtureA == fixture || fixtureB == fixture){
        return body.getLinearVelocity().y< 0; 
    }
    return false;
}

将两个固定装置(A和B)与夹具进行比较,可以看出玩家是否是“碰撞制造者”(抱歉,但我在英语中找不到合适的词),只是因为它在player类中的定义与方法相同。

我发现我可以在平台类中的userData中添加字符串,然后在shoudCollide中只能得到这个userData,我想知道这是否是一个好方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-23 06:04:01

我发现我可以在平台类中的userData中添加字符串,然后在shoudCollide中只能得到这个userData,我想知道这是否是一个好方法。

实际上,您可以在用户数据中放置任何Object

如果你真的只有平台和播放器,你可能会做以下的事情。请注意,这只是一个快速的演示,它并不涵盖所有情况(比如玩家与玩家的碰撞,或者平台与平台的碰撞)。对于更复杂的场景,您可能需要找到一个使用反射的更通用的算法。

代码语言:javascript
复制
Player player = ...;
playerFixture.setUserData(player);

Platform platform = ...;
platformFixture.setUserData(platform);

...

@Override
public boolean shouldCollide(Fixture fixtureA, Fixture fixtureB) {
    if (fixtureA.getUserData() != null && fixtureB.getUserData() != null) {
        Player player;
        Platform platform;
        if (fixtureA.getUserData() instanceof Player) {
            player = fixtureA.getUserData();
            platform = fixtureB.getUserData();
        } else {
            player = fixtureB.getUserData();
            platform = fixtureA.getUserData();
        }

        // now you have full access to the player and the platform
    }

    return false;
}

对于冲突筛选器来说,这可能有点过火了,但是一旦您必须实现冲突处理程序,您将需要真正的实体,而不仅仅是Strings

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20734270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档