2011-08-20 2 views
5

andengine Scene에서 런타임 중에 스프라이트의 레이어를 변경하는 방법은 무엇입니까?andengine에서 스프라이트 레이어를 변경하는 방법

+0

나는 모든 문제를 해결 했습니까? – NemoPhobia

+0

레이어에서 스프라이트 분리를 시도하고 스프라이트를 원하는 레이어에 연결 했습니까? – TheMadCapLaughs27

+0

네,하지만 그것을 시도했지만 changine 같은 느낌이 떨리는 원인이됩니다. – stackuser

답변

5

레이어를 변경하여 이해하는 내용에 따라 다릅니다. 엔티티의 Z 색인을 의미하는 경우 entity.setZIndex(int)을 사용할 수 있으며 스프라이트의 부모에서 parent.sortChildren()을 수동으로 호출해야합니다.

레이어를 변경하면 한 부모로부터 분리되어 다른 부모에게 연결된다는 의미 인 경우 다른 문제입니다.

2

최근에이 문제를 해결하기 위해 노력하고 있습니다. 복잡한 레이어 배열 (Scene Entity)이있는 경우 특히 sortChidren 및 setZOrder를 사용하여 스프라이트의 zorder를 유지하는 것이 불편합니다.

이 재정의를 소유 한 모든 Entity 파생 레이어에 추가하는 것으로 나타났습니다.

@Override 
protected void onDrawChildren(GL10 pGL, Camera pCamera) { 
    getParent().sortChildren(); 
    super.onDrawChildren(pGL, pCamera); 
} 

이것은 당신이 (주문 ++)를 Z 순서 sprite.setZOrder를 설정하고 당신이 당신의 실체입니다 보장 할 수 있습니다 당신은 적어도 설정 한 스프라이트 위해 그려진.

저는 오버 헤드가 상당히 많이 발생한다고 추측합니다. 그러나 은하계 에이스에 대해서는 알지 못합니다. (아직 프로파일 링을 시도하지 않음)

setZOrder (...)를 호출 할 때 상위에 추가 된 모든 후속 스프라이트/엔티티를 연결 한 후에 sortChildren을 호출해야합니다. 그렇지 않으면 상위 zorder 엔티티가 그려집니다 setZOrder는 실제로 3d 객체의 z 축을 설정하지 않으므로 새로 추가 된 객체에 의해 생성됩니다. 객체가 그려지는 순서 만. (모든 andengine 객체는 Entity의 mZIndex 값과 상관없이 동일한 z 축 값을가집니다.) 따라서 새로운 엔티티가 부모 엔티티에 추가 될 때마다 반드시 자식을 정렬해야합니다.

이것은 내가 지금까지 가지고있는 것입니다. 내가 틀렸거나 더 좋은 해결책이 있으면 저를 바로 잡으십시오.

+2

하지만 이제는'attachChild()'를 오버라이드 (override)하여 대신하는 것이 훨씬 효율적이라고 생각합니다. – Justin