2012-12-25 2 views
3

kineticJS를 사용하여 프로그램하려고하지만 Z- 색인 관리에 문제가 있습니다.KineticJS의 Z- 색인

원하는 범위의 Z- 색인을 설정할 수는 없지만 모든 개체는 자체 Z- 색인을 가져 와서 다른 개체와 다시 교환 할 수 있습니다. 그래서 만약 당신이 2 개의 물체를 가지고 있다면, 그것들은 0과 1의 Z- 색인을 얻습니다. 당신은 그것을 100이나 그와 비슷한 것으로 설정할 수 없습니다. 그 맞습니까?

내 문제는 아이소 메트릭 개요가있는 작은 게임을 프로그래밍하려고하는 것입니다. 그리고 선수는 z- 지수가 낮아지고 벽은 걷는 모습을 보일 것입니다. 그러나 그는 벽을 향해있을 때 Z- 인덱스가 높아야합니다. 하지만 같은 z 좌표의 벽이 모두 같은 z- 인덱스를 가질 수는 없습니다. 모든 z- 인덱스는 자유 롭습니다.이 인덱스는 모두 무작위로 만듭니다.

예를 들어, y 좌표 5의 벽은 z- 색인 5를 얻고 벽의 infront 선수는 z- 색인 6을 갖습니다. 그러나 결국에는 모든 벽이 5- 20과 플레이어가 임의의 색인을 얻음으로써 그러한 게임을 만드는 것은 완전히 불가능합니다.

개체의 Z- 색인을 관리하는 다른 방법이 있습니까? 내가 볼 수있는 유일한 해결책은 고유 Z- 인덱스를 사용하여 내지도의 모든 타일에 숨겨진 두 개의 객체가있는 숨겨진 레이어를 만드는 것이고 programm은 벽과 플레이어 또는 다른 객체로 동적으로 변경하는 스크립트입니다. 그러나 객체가 올바른 순서로 표시되는지보다 나은 방법이 있어야합니다.

+1

궁금하거나 동일한 문제가있는 경우 해결책을 찾았습니다. 40x40 타일의 등각 투영 맵이 있으므로 약 80 가지 가능한 깊이가 있습니다. 다른 Z- 색인으로 이것을 관리 할 수 ​​없기 때문에 이제는 80 개의 서로 다른 키네틱 그룹을 만들었습니다. 그리고 나는 오른쪽 그룹의 모든 물체와 벽을 움직이면서 세계를 이동할 때이 그룹들 사이에서 선수들을 이동시킵니다. 그게 지금까지 작동하고 나는 그 해결책을 유지할 것입니다. 다른 솔루션이 있는지 궁금합니다. –

답변

1

방금 ​​같은 문제가 발생했습니다. Z- 색인은 순차적으로 만 작동합니까? 따라서 요소 목록을 정렬 한 다음 배열 색인을 기반으로 Z- 색인을 할당했습니다.

var sortedElements = _elements.slice(); 
sortedElements.sort(function(a, b) { 
    var diff = a.getY() - b.getY(); 
    if (diff !== 0) { return diff; } 
    return a.getX() - b.getX(); 
}); 
for (var loop = 0, length = sortedElements.length; loop < length; loop++) { 
    sortedElements[loop].setZIndex(loop); 
}