私は、ゲームで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
。ここでは、その致命的なエラーは次のとおりです。
誰かが私もそれ以上のパラメータで、私の静的createBody
方法をフラッディングする必要はありませんので、これらのプロパティを編集する方法を見つける私を助けてください。ありがとうございました!