PDA

Просмотр полной версии : Z сортировка


KLIFF
01.02.2007, 04:11
всем привет!
вопрос очень интересный! ответа немогу найти
интересует вот что ! как сделать сортировку глубины ячеек карты
вот код который делает карту 10х10 ячеек
game = {};
game.columns = 10;
game.rows = 10;
game.spacing = 30;
game.depth = 1000;
game.path = _root.grid;
game.numberOfTypes = 8;
function buildGrid() {
for (var j = 1; j<=game.rows; ++j) {
for (var i = 1; i<=game.columns; ++i) {
var name = "cell"+i+"_"+j;
var x = (i-1)*game.spacing;
var y = (j-1)*game.spacing;
var type = 1;
game.path.attachMovie("cell", name, ++game.depth);
game.path[name]._x = x;
game.path[name]._y = y;
game[name] = {x:i, y:j, name:name, type:type, clip:game.path[name]};
}
}
}

предположим есть некий персонаж который передвигается по ячейкам
в опр. ячейках есть некий объект. если персанаж находится на ячейке ниже чем ячейка с объектом то персонаж покрывает объект.
а если персонаж находиться над ячейкой с объектом то объект покрывает персонажа
тоесть получаеться персонаж постоянно меняет свою глубину!
есть вариант делать глубину ячейки по следующей схеме
первая ячейка будет иметь глубину = 0 втарая = 10 треться 20 и т.д.
а персонаж попадая на ячейку с глубиной = 10 будет иметь глубину =11

вопрос: как задавать глубину ячеек? и как персонажу постоянно менять глубину?

всем спасибо.

iNils
01.02.2007, 05:09
Читать про swapDepths

CorC
01.02.2007, 10:38
я тоже недавно такое делал, но не про персонажей :)
глубину задавал примерно так
0+d 1+d 2+d 3+d 4+d
5+d 6+d 7+d 8+d 9+d
....
d это просто некот изнач глубина
написал функцию GetDepths которая по i j находит глубину
и потом если что надо менял swapDepths

firelord
01.02.2007, 16:00
я вот тоже над подобным алгоритмом работал - только у меня задача, вроде, посложнее была: во-первых - проекция изометрическая, во-вторых - объекты на карте могут иметь размер больше 1-й клетки. пока не сделал на деревьях, ничего не получалось...
в Вашем же случае. как мне представляется, все достаточно просто. глубину ячейки определяете как

(x+y*rows)*2

это - глубина "пола". соотв. глубина объекта, расположенного на "полу" равняется глубине пола+1.
когда персонаж заходит в ячейку, он получает высоту пола этой ячейки+1 - таким образом он автоматом будет над объектами, расположенными по y-1 - и под объектами на y+1
если я Вас правильно понял, конечно ;)

combo
01.02.2007, 16:41
я б задал каждому row свою глубину. Т.е. например все клетки cell.._1 имеют глубину 1, клетки cell.._2 - 3, клетки cell.._3 - 5. Суть в том, чтобы человечек, поднимаясь вверх или вниз ,также менял свою глубину на 2 (либо как-то узнавал глубину клетки на которой он стоит и прибавлял к её глубине единицу).

KLIFF
01.02.2007, 18:39
firelord спасибо !!! раскидал пол по твоей формуле только * на 5 =) что бы запас был побольше =)
ща делаю персанажа глубину ему буду брать от ячейки в которой он находиться +1 ... всем спасибо!