PDA

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


igrik
21.10.2005, 01:21
Люди, подскажите пожалуйста!

Есть карта квеста в аксонометрии 10*10 расположенная "углом"(в прямоугольной изомерии)

Надо, чтобы положение персонажа каждый раз было случайное.
В стандартной топ-даун проекции это выглядело бы так (при ширине и высоте 55 одной клетки):

chelx = Math.round(Math.random()*9);
chely = Math.round(Math.random()*9);
_root.pers._x=(55*chelx)+27,5;
_root.pers._y=(55*chely)+27,5;

Но как быть в изомерии, какой наиболее простой вариант?

Есть зверские варианты вроде для каждого положения определить

if(chelx==0 && chely==0){
...
}

Но тогда получится 100 вариантов, а мне еще таким же образом надо разместить 13 обьектов на этой карте!!! :eek: Да ещё чтоб они не накладывались...

Плиз, хелп!!! :confused:

igrik
21.10.2005, 01:23

[+ 1.4 20.08.2005]
что это значит?

FreeLander
21.10.2005, 01:34

[+ 1.4 20.08.2005]
что это значит?эт на погоны, правила форума игнорируешь)

ЗЫ а на вопрос твой ничего ответить увы не могу - слишком много словей умных (гы-гы)

igrik
21.10.2005, 03:02
я вроде законнопослушный...))

igrik
21.10.2005, 03:51
вот картина:
http://www.artlogic.nm.ru/kvestttt.jpg

iNils
21.10.2005, 11:57
this.move = function (xp, yp) {
var x = xp * w / 2 + yp * w / 2;
var y = xp * h / 2 - yp * h / 2;
return {x:x, y:y};
};
_root.createEmptyMovieClip ("mcLib", 10000000);
mcLib.lineStyle (0, 0x000000);
mcLib.beginFill (0x999999);
mcLib.lineTo (-20, -10);
mcLib.lineTo (0, -20);
mcLib.lineTo (20, -10);
mcLib.lineTo (0, 0);
mcLib.endFill ();
xi = 300;
yi = 100;
w = 40;
h = 20;
for (var i = 0; i < 10; i++) {
for (var j = 0; j < 10; j++) {
var obj = this.move (i, j);
mcLib.duplicateMovieClip ("mc" + i * 10 + j, i * 10 + j + 1, {_x:xi + obj.x, _y:yi + obj.y, _alpha:20});
}
}
this.onEnterFrame = function () {
xr = Math.floor (Math.random () * 10);
yr = Math.floor (Math.random () * 10);
var obj = this.move (xr, yr);
mcLib._x = xi + obj.x;
mcLib._y = yi + obj.y;
};
разберешься?

igrik
21.10.2005, 16:36
i'll try... :p

А вообще обьясни плиз)))

iNils
21.10.2005, 16:43
Фактически тебя интересует только эта функция, все остальное это демонстраниция применения.

this.move = function (xp, yp) {
var x = xp * w / 2 + yp * w / 2;
var y = xp * h / 2 - yp * h / 2;
return {x:x, y:y};
};

xp и yp это индексы клетки
отсечет идет от самой левой клетки, xp=0 yp=0
клетка правее и ниже это xp=1 yp=0
значит самая нижняя клетка это xp = максимум yp=0

igrik
21.10.2005, 16:48
я тут надумал кое что...
как оптимально сравнить переменные на наименьшее значение?

iNils
21.10.2005, 17:14
Поясни

igrik
21.10.2005, 17:25
спасибо)

igrik
21.10.2005, 17:54
а по поводу этого варианта...создать 100 клипов, прикреплённых к каждой клетке...
имена clip1...clip100
По пифагору находим расстояние до каждого клипа от обьекта и присваиваем координаты ближайшего...

Самим скриптом и то быстрее обьяснить)))

igrik
21.10.2005, 19:06
Внедрил, спс за помощь...