Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   положение обьекта в аксонометрии (http://www.flasher.ru/forum/showthread.php?t=70735)

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

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

FreeLander 21.10.2005 01:34

Цитата:

Сообщение от igrik
Zы
[+ 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

Внедрил, спс за помощь...


Часовой пояс GMT +4, время: 17:03.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.