내 게임에서 Box2D 바디를 만들기 위해 팩토리 패턴을 사용합니다. 다음은 바디를 생성하는 코드입니다.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이 반환됩니다. 키는 문자열이며 객체를 반환합니다. 이 때문에 같은 코드가 수행 할 수 있습니다 : 몸을 만들기 위해 당신이 알 수 그러나
public void attachNewSprite(String internalPath){
entitySprite = new Sprite(new Texture(Gdx.files.internal(internalPath)));
((Body)bodyObjects.get(BodyReferences.BODY)).setUserData(entitySprite);
}
해시 맵은 정적 방법, 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
방법을 홍수하지 않아도 이러한 속성을 편집 할 수있는 방법을 찾을 수 있도록 도와 주시겠습니까. 고맙습니다!