libgdx와 scene2d를 사용하는 카드 게임을하고있는 임. 내 카드 클래스는 Image 액터 클래스를 확장합니다. 나는 드래그 할 때 x 위치에 따라 카드가 그려지는 순서를 설정하는 방법을 찾고 있습니다. x에 따라 액터 z 인덱스를 조정하는 방법은 무엇입니까?
그래서 나는 시도 :@Override
public void drag(InputEvent event, float x, float y, int pointer) {
float sx = event.getStageX();
float sy = event.getStageY();
if(sx - offsetX > 0 && sy - offsetY > 0){
event.getTarget().setPosition(sx - offsetX, sy - offsetY);
c.setZIndex((int) sx);
}
}
분명히, Z- 색인이 무대/그룹에서 배우의 수에 바인딩되어 있기 때문에이 늘 작동합니다. 그래서 기본적으로 인덱스는 0-4가되어야합니다. 내 다음 접근 방식은 화면 너비를 5로 나누고 그 값을 zindex로 설정하는 것입니다. 카드가 전체 너비에 걸쳐 고르게 분리되어 있으면 잘 작동합니다. 하지만 카드가 중간에 압축되어 있으면 모양이 좋아지지 않습니다. 2 장에서 3 장의 카드가 가운데에 떨어지며 마지막으로 끌린 카드는 다른 카드 위에 그려진 카드입니다. 나는 그다지 원하지 않는다.
나의 마지막 접근 방식은 모든 카드를 xposition으로 주문하고 z- 색인을 제공하는 루프를 사용했습니다. 그리고 이것은 내가 원하는 것처럼 작동하지만 느린 (다른 모든 것들이 믹스에 추가되었을 때)
어쨌든 저는 액터를 반복하지 않고 x- 위치에 상대적으로 z- 인덱스를 설정할 수 있습니까?
의미 나는 여전히 그 배열 (지점)을 통해 루프해야 할 것인가? 내 질문은 그것을 통해 반복하지 않고 그것을하는 방법이었습니다. 그룹의 스왑 기능에 관해서는이 기능을 시도해보십시오.하지만 다시 한 번 배우를 찾아야 만합니다. :/모든 배우를 반복하지 않고이 작업을 수행 할 수 있습니까? – noisyass2
당신은 하드웨어의 힘을 과소 평가하고 있습니다. 100 명의 액터가 있고 배열을 반복하면 (배열이 매우 가벼운 것을 기억하십시오. 벡터에 포함 된 모든 것은 벡터입니다 (Vector2의 posArray []), 이것은 아무 것도 분해하지 않습니다. 아무리해도 libGDX에게 그릴 것을 요구해야합니다. 따라서 libgdx는 액터를 반복해야합니다. –
@ noisyass2 벤치마킹을 시도하십시오. 배열을 사용하는 첫 번째 제안은 훨씬 빠르다. –