2016-07-17 2 views
0

내 게임에서 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. 여기에 치명적인 오류는 다음과 같습니다

enter image description here

누군가가 제가 더 많은 매개 변수를 사용하여 내 정적 createBody 방법을 홍수하지 ​​않아도 이러한 속성을 편집 할 수있는 방법을 찾을 수 있도록 도와 주시겠습니까. 고맙습니다!

답변

1

조명기의 속성은 모양을 제외한 setter-methods를 사용하여 변경할 수 있습니다. getter-methods를 사용하여 모든 속성을 가져올 수 있습니다. Fixture API에 대해 자세히 살펴보십시오. 따라서 fixtureDef 객체를 저장할 필요가 없습니다. BodyDef와 Body도 비슷하게 관련되어 있습니다.