PDA

Просмотр полной версии : центрирование MovieClip по объектам в нем


Sysrepos
25.05.2008, 20:44
можно ли так сделать.
есть большой мувик (map1), в нем находится много объектов (object1, object2 ....) нужно сделать поиск их на карте.

я делал так:
двигал весь мувик (карту) чтоб нужный объект был в центре, смотрел его координаты в info, потом в лист боксе писал
case "object1":
setProperty ("map1", _x, 358.4);
setProperty ("map1", _y, 1007.1);
break;

и так для каждого объекта

Знакомый говорит, что наверняка есть какой то способ, чтоб каждый раз не определять координаты объектов, а как то программно центрировать мувик (map1) по объектам в нем находящихся (object1, object2 ....) .

Вопрос: Можно ли центрировать мувик (чтоб объект был в центре экрана), по именам мувиков (object1, object2 ....), в нем находящихся, а не определяя каждый раз координаты мувика?

Alex_beginner
25.05.2008, 20:50
Не совсем понятен вопрос!

А вообще

this["имя мува"]._x = Stage.width/2 //точка регистрации мува в центре

Sysrepos
25.05.2008, 21:05
this["имя мува"]._x = Stage.width/2 //точка регистрации мува в центре

эта штука центрирует сам мувик.

я имел ввиду что то вроде этого

this["map1.object1"]._y = Stage.height/2 // мувик map1 переместится
так что object1 (который внутри map1) будет в центре экрана.

только так не работает

Alex_beginner
26.05.2008, 10:54
Пользуйтесь в таком случае функциями localToGlobal и globalToLocal

И потом код


this["map1.object1"]._x;


Записывается вот так:

map1["object1"]._x

посокольку мув - object1 находится на временной шкале map1

А вообще алгоритм такой:

1. Поскольку клип object1 находится на временной шкале клипа map1
локальные координаты клипа object1 необходимо пересчитать в глобальные (главной временной шкалы. Или в Ваших терминах - экрана), используя для этого localToGlobal().
2. Получив глобальные координаты клипа object1 находим разницу между ними и глобальными координатами центра экрана с использованием лексем Xцентра_экрана = Stage._width/2 и Yцентра_экрана = Stage._height/2.
3. Вычитаем/складываем (в зависимости от знака) эти координаты с/из координат клипа-носителя map1 и центр мува object1 совпадет с центром экрана.

olexandr
26.05.2008, 14:30
наверное, так

Alex_beginner
26.05.2008, 14:49
Весьма оригинальный пример с классом Tween!
Но нет гарантии, что заказчику нужны именно такие расширенные функции:)
С localToGlobal() все делается намного проще.

chingachgoog
26.05.2008, 15:14
Когда я делал карту, просто добавил новое свойство для всех мувиков:

MovieClip.prototype.addProperty("coord",function(){ // Свойство координаты центра мувика
point={x:(this._width/2), y:(this._height/2)}
this.localToGlobal(point)
return point
}, null)

Сравнивая значение полученного центра мувика со значением середины экрана (через Stage) получаем искомую величину сдвига.

Sysrepos
28.05.2008, 03:19
прикольно, я тогда делал пол дня наверно (obj1 ... obj125), а можно было минут за десять сделать.

DJ_Baton
28.05.2008, 06:07
Я в своё время для создания карты делал так: снимал показатели объектов по _x и _y
и прописывал скрипт: Если данный _x меньше нужного то увеличивать, если больше уменьшать то же и по _y выходило прикольно, при срабатывании функции общая картина ехала с заданной скоростью к нужной точке

Alex_beginner
28.05.2008, 09:31
Можно было и без if....
Просто находишь разницу между требуемой точкой клипа и текущей, и делишь все это на количество шагов - получаешь шаг, а потом, например, в обработчике onEnterFrame прибавляешь полученную величину к текущей координате клипа и заодно контроллируешь кол-во сделанных шагов.