Просмотр полной версии : центрирование 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 прибавляешь полученную величину к текущей координате клипа и заодно контроллируешь кол-во сделанных шагов.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.