【发布时间】:2016-07-17 09:19:19
【问题描述】:
我使用工厂模式在我的游戏中创建 Box2D 实体。以下是创建主体的代码:
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。键是字符串并返回一个对象。这样的代码可以完成:
public void attachNewSprite(String internalPath){
entitySprite = new Sprite(new Texture(Gdx.files.internal(internalPath)));
((Body)bodyObjects.get(BodyReferences.BODY)).setUserData(entitySprite);
}
返回的HashMap存储在bodyObjects中
但是您会注意到,在创建实体的静态方法中,没有设置密度和摩擦力等属性。这是因为我认为通过返回对象我可以编辑它们。这是我假设我会编辑 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))));
}
所以我基本上设置了新属性,从主体中删除了fixturedef,然后添加了新的。执行此操作时,我会收到 fatal error。我删除了删除fixturedef 的行并得到相同的fatal error。这是致命错误:
谁能帮我找到一种方法来编辑这些属性,这样我就不必用更多的参数来淹没我的静态createBody 方法。谢谢!
【问题讨论】: