2

Android用のjBox2dと組み合わせてjbox2dを使用してゲームを開発しています。ユーザーが私の世界のさまざまな体の中で特定の動的体に触れたかどうかを検出したいと思います。私はすべての体を繰り返し試して、興味のあるものを見つけましたが、うまくいきませんでした。私がやったことHeresを助けてください:

@Override
public boolean ccTouchesEnded(MotionEvent event)
{
    CGPoint location = CCDirector.sharedDirector().convertToGL(CGPoint.ccp(event.getX(), 
            event.getY()));

    for(Body b = _world.getBodyList();b.getType()==BodyType.DYNAMIC; b.getNext())
    {
        CCSprite sprite = (CCSprite)b.getUserData();
        if(sprite!=null && sprite instanceof CCSprite)
        {
            CGRect body_rect = sprite.getBoundingBox();
            if(body_rect.contains(location.x, location.y))
            {
                Log.i("body touched","<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
                expandAndStopBody(b);
                break;
            }

        }   
    }
return true;
}

タッチ後、システムは GC_CONCURRENT 解放された 1649K、14% 解放された 11130K/12935K を出力し続け、1ms+2ms 一時停止し、すべてがハング状態になります。

4

2 に答える 2

1

体が触れているかどうかを確認するには、ワールド オブジェクトのメソッドqueryAABBを使用できます。メソッドを使用するようにコードを再配置しようとしています:

// to avoid creation every time you touch the screen
private QueryCallback qc=new QueryCallback() {

    @Override
    public boolean reportFixture(Fixture fixture) {
            if (fixture.getBody()!=null) 
            {
                    Body b=fixture.getBody();
                    CCSprite sprite = (CCSprite)b.getUserData();
                    Log.i("body touched","<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");           
                    expandAndStopBody(b);
            }
            return false;
    }
};

private AABB aabb;

@Override
public boolean ccTouchesEnded(MotionEvent event)
{
    CGPoint location = CCDirector.sharedDirector().convertToGL(CGPoint.ccp(event.getX(), event.getY()));

    // define a bounding box with width and height of 0.4f
    aabb=new AABB(new Vec2(location.x-0.2f, location.y-0.2f),new Vec2(location.x+0.2f, location.y+0.2f));               
    _world.queryAABB(qc, aabb);            

    return true;
}

ガベージコレクターを削減しようとしていますが、何かをインスタンス化する必要があります。http://www.iforce2d.net/b2dtut/world-queryingに関する詳細情報

于 2013-10-22T15:21:44.167 に答える
0

リストで本文が null でないことを確認する必要があります。

for ( Body b = world.getBodyList(); b!=null; b = b.getNext() )
{
    // do something
}

これでハングが解決するかどうかはわかりませんが、解決する必要があります。

于 2012-10-20T08:07:19.670 に答える