确定是否包含阶段子弹或在体内

时间:2014-12-26 09:10:52

标签: java libgdx box2d collision-detection

下图是图片演示。

我正在使用Box2D和LibGDX。

基本上我有一个随机大小的'阶段'子弹。阶段子弹穿过对象并被设置为传感器。

我的问题是,Libgdx或Box2d没有像“isBodyColliding”这样的简单函数,所以我试图实现自己的(不起作用):

@Override
    public void update(float update) {
        super.update(update);

        this.countdownTillNextHit.reduceTime(update);

        if(this.countdownTillNextHit.isComplete())
        {
            this.countdownTillNextHit.start(this.hitTimer);

            GameController.getInstance().getWorld().QueryAABB(new QueryCallback() {
                @Override
                public boolean reportFixture(Fixture fixture)
                {
                    if(fixture.getBody().getUserData() != null && fixture.getBody().getUserData() instanceof LivingObject)
                    {
                        LivingObject livingObject = ((LivingObject) fixture.getBody().getUserData());
                        if(livingObject.getLongestBox2D() > getLongestBox2D())
                        {
                            if(fixture.testPoint(getBody().getWorldCenter()))
                            {
                                for(PhaseHitInterface phaseHitInterface : phaseHitInterfaceArray)
                                {
                                    phaseHitInterface.hitLivingObjectRepeat(livingObject);
                                }
                            }
                        }
                        else
                        {
                            if(getBody().getFixtureList().first().testPoint(livingObject.getBody().getWorldCenter()))
                            {
                                for(PhaseHitInterface phaseHitInterface : phaseHitInterfaceArray)
                                {
                                    phaseHitInterface.hitLivingObjectRepeat(livingObject);
                                }
                            }
                        }
                    }

                    return false;
                }
            },
                this.getBody().getPosition().x - (getWidthBox2d() / 2f), //Lower left x
                this.getBody().getPosition().y - (getHeightBox2d() / 2f), //Lower left y,
                this.getBody().getPosition().x + (getWidthBox2d() / 2f),
                this.getBody().getPosition().y + (getWidthBox2d() / 2f)
            );

        }

我尝试使用开始接触和结束接触数组来跟踪区域内外的内容但是endContact没有得到调用导致数组因为对先前对象的引用而变大。

有人可以帮助我吗?

Phase Bullet Image

0 个答案:

没有答案