|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
Синхронизация движения объектов
Доброго времени суток коллеги-форумчане.
Прошу вашей помощи ибо сам уже запутался. Вопрос в следующем: я описываю класс в котором есть визуальные элементы и в этом же классе описываю событие клика, по которому каждый экземпляр должен начать двигаться в ту или иную сторону зависимости от положения. Проблема возникла в следующем. Как заставить все экземпляры класса двигаться одновременно при щелчке на одном из них. Экземпляры естественно создаются в другом классе, причем динамически с помощью массива. в общем такая беда. Третий день бьюсь. в первом варианте я синхронизировал через событие onFrame где слушал булеву каждого экземпляра и приравнивал если появлялась положительная все двигалось а теперь почему-то перестало. Пока без кода ибо лень в данный момент копипастить. но если надо. добавлю. мне кажется я упускаю какую-то маленькую деталь. |
|
|||||
Регистрация: Jun 2013
Сообщений: 133
|
Возможно у вас неудобная архитектура проекта. Как у вас происходит навешивание клика - в цикле на каждый объект или на весь контейнер с объектами?
|
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
нет клик навешивается в основном классе где описывается весь класс, который уже вызывается в родителе. Получается что класс описывает все что должен делать каждый экземпляр. Проще говоря поведение описано в классе и экземпляр слушается как должен, но только 1 тот на котором щелкнули а остальные не реагируют. Вот мне нужно чтобы все отзывались дружно. Толкнул одного остальные тоже подвинулись. Раньше это было двигались, но не останавливались. Когда я исправил и сделал остановку другие почему-то перестали синхронизироваться. Я добавил пару переменных, и их тоже в синхрон передал. такое впечатление что они тупо перестали слушаться булевы движения.
То есть в классе есть булева переменная которая ложна по умолчанию. В синхроне как только появляется правда все остальные экземпляры тоже получают правду и по идеи должны начать движение. сейчас приведу код синхронизации if (arr_icon[controlRoll].Moving) { arr_icon[0].Moving = arr_icon[controlRoll].Moving; arr_icon[1].Moving = arr_icon[controlRoll].Moving; arr_icon[2].Moving = arr_icon[controlRoll].Moving; arr_icon[3].Moving = arr_icon[controlRoll].Moving; arr_icon[4].Moving = arr_icon[controlRoll].Moving; arr_icon[0].LRDirect = arr_icon[controlRoll].LRDirect; arr_icon[1].LRDirect = arr_icon[controlRoll].LRDirect; arr_icon[2].LRDirect = arr_icon[controlRoll].LRDirect; arr_icon[3].LRDirect = arr_icon[controlRoll].LRDirect; arr_icon[4].LRDirect = arr_icon[controlRoll].LRDirect; arr_icon[0].anglerot = arr_icon[controlRoll].anglerot; arr_icon[1].anglerot = arr_icon[controlRoll].anglerot; arr_icon[2].anglerot = arr_icon[controlRoll].anglerot; arr_icon[3].anglerot = arr_icon[controlRoll].anglerot; arr_icon[4].anglerot = arr_icon[controlRoll].anglerot; }else { arr_icon[0].Moving = false; arr_icon[1].Moving = false; arr_icon[2].Moving = false; arr_icon[3].Moving = false; arr_icon[4].Moving = false; } Moving - булева переменная двигаться или нет LRDirect - переменная цифровая отвечающая за направление движения anglerot - это угол проще говоря расстояние на которое они должны сместиться. вот в общем anglerot добавил чтобы они не двигались бесконечно и соответствено передаю его остальным ибо он определяется в том экземпляре на котором кликнули. Еще раз повторюсь без последней модификации все двигалось просто была ошибка для устранения которой добавил переменную. |
|
|||||
Banned
[+1 06.12.14]
[+1 18.12.14] [+1 30.12.14] Регистрация: Aug 2014
Сообщений: 461
|
Это не синхронизация, это ...изм! Переделайте все это в циклы для начала и объясните, как у Вас двигаются объекты, одинаково или нет.
|
|
|||||
Регистрация: Jun 2013
Сообщений: 133
|
ну если в основном, тогда при срабатывание события, просто пробегайтесь по массиву объектов и присваивайте нужному параметру нужное значение
|
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
Цитата:
Цитата:
Вся идея в том чтобы обьект после клика встал на место так называемого первого обькта. и соответственно остальные тоже должны "подвинуться" |
|
|||||
Lorem ipsum
|
Каждый экземпляр класса мог бы предоставлять публичный метод, который инициирует начало движения. Тогда остается лишь дождаться клика, определить, что это именно тот клик, который нам нужен (какие там критерии у тебя) и сказать родителю-собирателю, чтобы сказал своим, что таки надо двигать. И уже этот класс-контейнер пробегается в цикле по всем экземплярам и вызывает у них метод типа chegoStoimKogoZhdem(kudaBezhatX, kudaBezhatY). Как-то так.
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Jun 2013
Сообщений: 133
|
Скорее всего будет проще, если вы скинете небольшой исходник по которму можно будет уже более подробно разобраться и потыкать что у вас получилось.
|
|
|||||
Цитата:
Ваш код можно минимизировать до такого: if (arr_icon[controlRoll].Moving) { for (var i:String in arr_icon) { if (arr_icon[i] == arr_icon[controlRoll]) continue; arr_icon[i].Moving = arr_icon[controlRoll].Moving; arr_icon[i].LRDirect = arr_icon[controlRoll].LRDirect; arr_icon[i].anglerot = arr_icon[controlRoll].anglerot; } } else { for (i in arr_icon) { arr_icon[i].Moving = false; } }
__________________
Ко мне можно и нужно обращаться на ты) |
|
|||||
Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
|
Цитата:
Цитата:
пройти по описанию 1 метр расстояния; пройти влево\вправо; можно идти; |
Часовой пояс GMT +4, время: 05:39. |
|
« Предыдущая тема | Следующая тема » |
|
|