2016-07-17 4 views
0

私は、ゲームでBox2Dボディを作成するためにFactory Patternを使用します。本文を作成するコードは次のとおりです。FixtureDefプロパティを変更するJava Libgdx

public static HashMap<String, Object> createAndGet(Vector2 position, Vector2 dimensions, 
     BodyType type, boolean isCircle){ 
    HashMap<String, Object> bodyObjectsHash = new HashMap<String, Object>(); 

    BodyDef bodyDef = new BodyDef(); 
    bodyDef.type = type; 
    bodyDef.position.set(new Vector2(position.x, position.y)); 

    Body body = EntityManager.createBody(bodyDef, dimensions); 

    FixtureDef fixtureDef = new FixtureDef(); 
    Fixture fixture; 
    if(isCircle){ 
     CircleShape circle = new CircleShape(); 
     circle.setRadius(dimensions.x); 
     fixtureDef.shape = circle; 
     fixture = body.createFixture(fixtureDef); 
     circle.dispose(); 
    }else{ 
     PolygonShape rectangle = new PolygonShape(); 
     rectangle.setAsBox(dimensions.x, dimensions.y); 
     fixtureDef.shape = rectangle; 
     fixture = body.createFixture(fixtureDef); 
     rectangle.dispose(); 
    } 


    bodyObjectsHash.put(BodyReferences.BODY, body); 
    bodyObjectsHash.put(BodyReferences.BODY_DEF, bodyDef); 
    bodyObjectsHash.put(BodyReferences.FIXTURE, fixture); 
    bodyObjectsHash.put(BodyReferences.FIXTURE_DEF, fixtureDef); 


    return bodyObjectsHash; 


} 

これで、HashMapが返されます。キーは文字列であり、オブジェクトを返します。これがため、このようなコードを達成することができるされている:体を作成するための静的メソッドでは、そのような密度及び摩擦などのプロパティが設定されていない、あなたが気づくしかしbodyObjects

public void attachNewSprite(String internalPath){ 
    entitySprite = new Sprite(new Texture(Gdx.files.internal(internalPath))); 
    ((Body)bodyObjects.get(BodyReferences.BODY)).setUserData(entitySprite); 
} 

のHashMapが返さ格納されています。これは、私が編集できるオブジェクトを返すことによって考えたからです。ここで私は私がFixtureDefを編集しますと仮定する方法である:

public void addFixtureDefProperties(float density, float friction, float restitution){ 
    ((FixtureDef)(bodyObjects.get(BodyReferences.FIXTURE_DEF))).density = density; 
    ((FixtureDef)(bodyObjects.get(BodyReferences.FIXTURE_DEF))).friction = friction; 
    ((FixtureDef)(bodyObjects.get(BodyReferences.FIXTURE_DEF))).restitution = restitution; 

    /*This line will be discussed */ 
    ((Body)(bodyObjects.get(BodyReferences.BODY))).getFixtureList().removeRange(0, ((Body)(bodyObjects.get(BodyReferences.BODY))).getFixtureList().size - 1); 
    ((Body)(bodyObjects.get(BodyReferences.BODY))).createFixture(((FixtureDef)(bodyObjects.get(BodyReferences.FIXTURE_DEF)))); 
} 

SO私は基本的に新しいプロパティを設定し、身体からfixturedefを削除し、新しいものを追加します。これを行うとき私はfatal errorを得る。私はfixturedefを削除した線を削除し、同じものを得るfatal error。ここでは、その致命的なエラーは次のとおりです。

enter image description here

誰かが私もそれ以上のパラメータで、私の静的createBody方法をフラッディングする必要はありませんので、これらのプロパティを編集する方法を見つける私を助けてください。ありがとうございました!

答えて

1

フィクスチャのプロパティは、そのシェイプを除くsetter-methodsを使用して変更できます。 getter-methodsですべてのプロパティを取得できます。 Fixture APIを詳しく見てください。したがって、fixtureDefオブジェクトを保存する必要はありません。 BodyDefとBodyも同様に関連しています。

関連する問題