Форум 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)
-   -   центрирование MovieClip по объектам в нем (http://www.flasher.ru/forum/showthread.php?t=112366)

Sysrepos 25.05.2008 20:44

центрирование MovieClip по объектам в нем
 
можно ли так сделать.
есть большой мувик (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

Вложений: 1
наверное, так

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 прибавляешь полученную величину к текущей координате клипа и заодно контроллируешь кол-во сделанных шагов.


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

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