Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.08.2014, 18:23
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 1  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
По умолчанию Синхронизация движения объектов

Доброго времени суток коллеги-форумчане.
Прошу вашей помощи ибо сам уже запутался.
Вопрос в следующем: я описываю класс в котором есть визуальные элементы и в этом же классе описываю событие клика, по которому каждый экземпляр должен начать двигаться в ту или иную сторону зависимости от положения. Проблема возникла в следующем. Как заставить все экземпляры класса двигаться одновременно при щелчке на одном из них. Экземпляры естественно создаются в другом классе, причем динамически с помощью массива.
в общем такая беда. Третий день бьюсь.
в первом варианте я синхронизировал через событие onFrame где слушал булеву каждого экземпляра и приравнивал если появлялась положительная все двигалось а теперь почему-то перестало.
Пока без кода ибо лень в данный момент копипастить. но если надо. добавлю. мне кажется я упускаю какую-то маленькую деталь.

Старый 15.08.2014, 19:11
Rivexe вне форума Посмотреть профиль Отправить личное сообщение для Rivexe Найти все сообщения от Rivexe
  № 2  
Ответить с цитированием
Rivexe
 
Аватар для Rivexe

Регистрация: Jun 2013
Сообщений: 133
Возможно у вас неудобная архитектура проекта. Как у вас происходит навешивание клика - в цикле на каждый объект или на весь контейнер с объектами?

Старый 15.08.2014, 19:31
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 3  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
нет клик навешивается в основном классе где описывается весь класс, который уже вызывается в родителе. Получается что класс описывает все что должен делать каждый экземпляр. Проще говоря поведение описано в классе и экземпляр слушается как должен, но только 1 тот на котором щелкнули а остальные не реагируют. Вот мне нужно чтобы все отзывались дружно. Толкнул одного остальные тоже подвинулись. Раньше это было двигались, но не останавливались. Когда я исправил и сделал остановку другие почему-то перестали синхронизироваться. Я добавил пару переменных, и их тоже в синхрон передал. такое впечатление что они тупо перестали слушаться булевы движения.
То есть в классе есть булева переменная которая ложна по умолчанию. В синхроне как только появляется правда все остальные экземпляры тоже получают правду и по идеи должны начать движение. сейчас приведу код синхронизации

Код AS3:
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;
			}
arr_icon - как наверно догадались - массив в котором все экземпляры храняться
Moving - булева переменная двигаться или нет
LRDirect - переменная цифровая отвечающая за направление движения
anglerot - это угол проще говоря расстояние на которое они должны сместиться.
вот в общем anglerot добавил чтобы они не двигались бесконечно и соответствено передаю его остальным ибо он определяется в том экземпляре на котором кликнули. Еще раз повторюсь без последней модификации все двигалось просто была ошибка для устранения которой добавил переменную.

Старый 15.08.2014, 19:41
Gerbert вне форума Посмотреть профиль Найти все сообщения от Gerbert
  № 4  
Ответить с цитированием
Gerbert
Banned
[+1 06.12.14]
[+1 18.12.14]
[+1 30.12.14]

Регистрация: Aug 2014
Сообщений: 461
Это не синхронизация, это ...изм! Переделайте все это в циклы для начала и объясните, как у Вас двигаются объекты, одинаково или нет.

Старый 15.08.2014, 19:42
Rivexe вне форума Посмотреть профиль Отправить личное сообщение для Rivexe Найти все сообщения от Rivexe
  № 5  
Ответить с цитированием
Rivexe
 
Аватар для Rivexe

Регистрация: Jun 2013
Сообщений: 133
ну если в основном, тогда при срабатывание события, просто пробегайтесь по массиву объектов и присваивайте нужному параметру нужное значение

Старый 15.08.2014, 19:58
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 6  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
Цитата:
Это не синхронизация, это ...изм! Переделайте все это в циклы для начала и объясните, как у Вас двигаются объекты, одинаково или нет.
Причем здесь изм? О_о. На счет циклов я как-то не очень ровно дышу к циклам в ENTER_FRAME а именно там весь этот код находиться и ничего больше. Прдеметы двигаются одинаково ибо они лишь экземпляры одного и того же класса.

Цитата:
ну если в основном, тогда при срабатывание события, просто пробегайтесь по массиву объектов и присваивайте нужному параметру нужное значение
Это как я чет не понял? Я вроде здесь и пробегаюсь. Клик описан как говорилось раньше в другом классе. Клик всего лишь задает переменную двигаться в правду и задает угол смещения от положения обьекта по которому ткнули.

Вся идея в том чтобы обьект после клика встал на место так называемого первого обькта. и соответственно остальные тоже должны "подвинуться"

Старый 15.08.2014, 20:18
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 7  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Каждый экземпляр класса мог бы предоставлять публичный метод, который инициирует начало движения. Тогда остается лишь дождаться клика, определить, что это именно тот клик, который нам нужен (какие там критерии у тебя) и сказать родителю-собирателю, чтобы сказал своим, что таки надо двигать. И уже этот класс-контейнер пробегается в цикле по всем экземплярам и вызывает у них метод типа chegoStoimKogoZhdem(kudaBezhatX, kudaBezhatY). Как-то так.
__________________
Поймай яблоко 2!

Старый 15.08.2014, 20:18
Rivexe вне форума Посмотреть профиль Отправить личное сообщение для Rivexe Найти все сообщения от Rivexe
  № 8  
Ответить с цитированием
Rivexe
 
Аватар для Rivexe

Регистрация: Jun 2013
Сообщений: 133
Скорее всего будет проще, если вы скинете небольшой исходник по которму можно будет уже более подробно разобраться и потыкать что у вас получилось.

Старый 15.08.2014, 20:34
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
На счет циклов я как-то не очень ровно дышу к циклам в ENTER_FRAME
А зря.
Ваш код можно минимизировать до такого:
Код AS3:
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; 
	}
}
__________________
Ко мне можно и нужно обращаться на ты)

Старый 15.08.2014, 20:49
PsychoTech вне форума Посмотреть профиль Отправить личное сообщение для PsychoTech Найти все сообщения от PsychoTech
  № 10  
Ответить с цитированием
PsychoTech
 
Аватар для PsychoTech

Регистрация: Aug 2014
Адрес: Где-то на поверхности планеты, какой хз
Сообщений: 113
Цитата:
А зря.
Ваш код можно минимизировать до такого:
Код AS3:

Код AS3:
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; 
	}
}
да я в принципе так и собирался сделать просто в процессе это нагляднее. и поскольку опыта не так много такой код не понизит FPS?

Цитата:
Каждый экземпляр класса мог бы предоставлять публичный метод, который инициирует начало движения. Тогда остается лишь дождаться клика, определить, что это именно тот клик, который нам нужен (какие там критерии у тебя) и сказать родителю-собирателю, чтобы сказал своим, что таки надо двигать. И уже этот класс-контейнер пробегается в цикле по всем экземплярам и вызывает у них метод типа chegoStoimKogoZhdem(kudaBezhatX, kudaBezhatY). Как-то так.
Так изначально и делал а потом столкнулся с проблемой как определить на ком щелкнули, потому что e.target.... и так далее не дала результата. а как реализовать видимо тямы не хватает. поэтому собственно и сделал описание класса в котором есть публичная булева разрешающая и запрещающая движение. А собственно ваш публичный метод "когождем" описан в ENTER_FRAME и как только переменная движения становиться TRUE движение начинается до тех пор пока обработка движения не поставит FALSE. Де факто получается следующее: Всем экземплярам сообщается:
пройти по описанию 1 метр расстояния;
пройти влево\вправо;
можно идти;

Создать новую тему Ответ Часовой пояс GMT +4, время: 05:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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