2012-11-25 6 views
1

과 같은 수집 가능한 객체를 제거하고 im은 andangine과 tmx 및 body2d 확장자를 사용하여 게임을 개발합니다. 지도를 만드는 동안 특정 위치의 동전과 같은 오브젝트 (스프라이트)를 만듭니다. 나는 플레이어가 동전과 충돌하는지 확인하기 위해 contactlistener를 사용합니다.및 엔진은 Sprites

어떻게이 스프라이트를 삭제할 수 있습니까? 및 내 스프라이트를 어떻게 구성 할 수 있습니까? thanks =)

답변

1

PhysicsConnector을 작성하여 스프라이트와 본문을 연결한다고 가정합니다. 이 물리학 커넥터의 목록을 만들고, 당신이 몸 (그리고 그 스프라이트)를 제거해야합니다 결정할 때, 다음을 수행하십시오 스프라이트 조직에 대한

Body bodyToRemove = //Get it from your contact listener 
for(PhysicsConnector connector : mPhysicsConnectors) //mPhysicsConnectors is the list of your coins physics connectors. 
    if(connector.getBody() == bodyToRemove) 
     removeSpriteAndBody(connector); //This method should also delete the physics connector itself from the connectors list. 

을 : 동전을 다시 사용 가능한 스프라이트, 당신은 다시 안 그들마다. 이 주제에 관해서는 here's이라는 객체 풀을 사용할 수 있습니다.

+0

확인. removeSpriteAndBody 같은 메서드를 수행하지만이 메서드가 호출 될 때 내 응용 프로그램이 충돌합니다. -25 23 : 50 : 51.869 : E/AndroidRuntime (15700) : 치명적인 예외 : UpdateThread 11-25 23 : 50 : 51.869 : E/AndroidRuntime (15700) : java.util.ConcurrentModificationException 11-25 23:50 : 51.869 : E/AndroidRuntime (15700) : \t at java.util.ArrayList $ ArrayListIterator.next (ArrayList.java:576) – blub

+1

이것을 시도하십시오. Iterator iterator = mPhysicsConnectors.iterator(); \t \t while (iterator.hasNext()) { \t \t \t connector = iterator.next(); \t \t \t if (connector.getBody() == needToRemove) { iterator.remove(); removeSpriteAndBody (connector); } } – Aleksandrs

+0

내 게임에서 비슷한 것을 구현할 때도이 문제가 발생했습니다. Racoon이 말한 것을 사용하면 효과가 있습니다. – Jong

0

본문의 사용자 데이터를 설정하는 것이 좋습니다. 그리고 충돌 처리기에서 작업 할 수 있습니다. 작은 예 :

body.setUserData(...); 

..

public void postSolve(Contact contact, ContactImpulse impulse) { 

      ... bodyAType = (...) bodyA.getUserData(); 
      ... bodyBType = (...) bodyB.getUserData(); 
      if (bodyAType != null && bodyBType != null) { 
       if (bodyAType.getUserData.equals(...)) { 
        //.......do what you need 
       } 
      } 
    } 
+0

그래, 내가 이미 사용하고있는 것. – blub