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

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

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

Регистрация: Jan 2007
Сообщений: 368
По умолчанию Подскажите как лучше организовать движение большого количества объектов

Подскажите как лучше организовать движение большого кол-ва объектов?
Есть 2 варианта:
1. Каждому объекту назначить обработчик ENTER_FRAME и двигать
2. Сделать глобальный обработчик ENTER_FRAME , а каждому объекту задавать вектор движения и двигать все объекты из единого обработчика.
Как будет быстрее и правильнее?

Старый 30.08.2010, 10:16
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 2  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Вариант 2.
Если можно сделать один обработчик, зачем создавать много?
Если характер движения имеет закономерность в зависимости от номера объекта, в этой функции вычисляйте координаты движения циклом по объектам.
Если нет, создайте массив координат, тоже все циклом и используйте массив для вычислений.
__________________
Идите первым!


Последний раз редактировалось mooncar; 30.08.2010 в 11:18.
Старый 30.08.2010, 10:43
Dragon rideR вне форума Посмотреть профиль Отправить личное сообщение для Dragon rideR Найти все сообщения от Dragon rideR
  № 3  
Ответить с цитированием
Dragon rideR
 
Аватар для Dragon rideR

Регистрация: Jan 2007
Сообщений: 368
ага спасибо так и думал

Старый 16.11.2010, 08:00
Morozov1982 вне форума Посмотреть профиль Отправить личное сообщение для Morozov1982 Найти все сообщения от Morozov1982
  № 4  
Ответить с цитированием
Morozov1982
 
Аватар для Morozov1982

Регистрация: Dec 2005
Адрес: Казахстан, г.Алматы.
Сообщений: 147
Отправить сообщение для Morozov1982 с помощью ICQ
Цитата:
Сообщение от mooncar Посмотреть сообщение
Вариант 2.
Если можно сделать один обработчик, зачем создавать много?
Если характер движения имеет закономерность в зависимости от номера объекта, в этой функции вычисляйте координаты движения циклом по объектам.
Если нет, создайте массив координат, тоже все циклом и используйте массив для вычислений.
А можете простой пример написать, или ссылочку на аналогичный урок или исходник, тоже интересна эта тема.

Заранее благодарю.
__________________
Помогайте новичкам, вы сами ими когда-то были!!!

Старый 16.11.2010, 13:37
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 5  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Допустим, на сцене 10 мувиков - mc1, mc2...mc10.
Тогда:
Код AS1/AS2:
this.onEnterFrame = function()
{
   for (i = 1; i <= 10; i++)
   {
      var mc:MovieClip = this['mc' + i];
      mc._x += 5;
      mc._y += 2;
   }
}
Нелинейное движение (вводится параметр, зависящий от номера):
Код AS1/AS2:
this.onEnterFrame = function()
{
   for (i = 1; i <= 50; i++)
   {
      var mc:MovieClip = this['mc' + i];
      mc._x += 5 * (i / 2) ;
      mc._y += 2;
   }
}
С остановкой, и если мувиков много и все находятся в контейнере cont_mc.
Код AS1/AS2:
var c:Number = 0;
this.onEnterFrame = function()
{
	if (c <= 30) 
	{
		for (i = 1; i <= 50; i++)
		{
			var mc:MovieClip = cont_mc['mc' + i];
			mc._x += 5 * (i / 2) ;
			mc._y += 2;
		}
		c++;
	}
}
Если мувики в контейнере, но при этом их неопределенное количество и они непоименованы:
Код AS1/AS2:
this.onEnterFrame = function()
{
	for (i in cont_mc)
	{
		var mc:MovieClip = cont_mc[i];
		mc._x += 5;
		mc._y += 2;
	}
}
В общем, насколько у вас хватит фантазии, желания и опыта.
С массивом примера не привожу, забивать координатами сил нету.
Скажу только, что массив нужен многомерный.

PS. Тему бы в AS2, автор топика сразу об EnterFrame заговорил...
__________________
Идите первым!


Последний раз редактировалось mooncar; 16.11.2010 в 13:47.
Старый 16.11.2010, 14:54
Morozov1982 вне форума Посмотреть профиль Отправить личное сообщение для Morozov1982 Найти все сообщения от Morozov1982
  № 6  
Ответить с цитированием
Morozov1982
 
Аватар для Morozov1982

Регистрация: Dec 2005
Адрес: Казахстан, г.Алматы.
Сообщений: 147
Отправить сообщение для Morozov1982 с помощью ICQ
Благодарю, оч. хорошие примеры, но все-таки хотелось бы с массивом, могу даже подкинуть, к примеру:
Код AS1/AS2:
var tr:Array = [[240,500],[240,490],[240,480],[240,470],[240,460],[240,450],[240,440],[240,430],[240,420],[240,410],[240,400],[240,390],[240,380],[240,370],[240,360],[240,350],[240,340],[240,330],[240,320],[240,310],[240,300],[240,290],[240,280],[240,270],[240,260],[240,250],[240,240],[240,230],[240,220],[240,210],[240,200],[240,190],[240,180],[240,170],[240,160],[240,150],[240,140],[240,130],[240,120],[240,110],[240,100],[240,90],[240,80],[240,70],[250,70],[260,70],[270,70],[280,70],[290,70],[300,70],[310,70],[320,70],[330,70],[340,70],[350,70],[360,70],[365,75],[365,85],[365,95],[365,105],[365,115],[365,125],[365,135],[365,145],[365,155],[365,165],[365,175],[365,185],[365,195],[365,205]];
Снова, заранее благодарю.
__________________
Помогайте новичкам, вы сами ими когда-то были!!!

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от Morozov1982 Посмотреть сообщение
Благодарю, оч. хорошие примеры, но все-таки хотелось бы с массивом, могу даже подкинуть, к примеру:
Код AS1/AS2:
var tr:Array = [[240,500],[240,490],[240,480],[240,470],[240,460],[240,450],[240,440],[240,430],[240,420],[240,410],[240,400],[240,390],[240,380],[240,370],[240,360],[240,350],[240,340],[240,330],[240,320],[240,310],[240,300],[240,290],[240,280],[240,270],[240,260],[240,250],[240,240],[240,230],[240,220],[240,210],[240,200],[240,190],[240,180],[240,170],[240,160],[240,150],[240,140],[240,130],[240,120],[240,110],[240,100],[240,90],[240,80],[240,70],[250,70],[260,70],[270,70],[280,70],[290,70],[300,70],[310,70],[320,70],[330,70],[340,70],[350,70],[360,70],[365,75],[365,85],[365,95],[365,105],[365,115],[365,125],[365,135],[365,145],[365,155],[365,165],[365,175],[365,185],[365,195],[365,205]];
Снова, заранее благодарю.
??? А что должно получится из этого?

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

Регистрация: Dec 2005
Адрес: Казахстан, г.Алматы.
Сообщений: 147
Отправить сообщение для Morozov1982 с помощью ICQ
Это массив координат парами [_x,_y], они (пары) представляют собой траекторию движения объектов.
Отвечая на вопрос "??? А что должно получится из этого?", скажу объекты должны начать двигаться по этой траектории.
Не забывайте читать не только последний пост, но и предыдущие, тогда картина становится немного яснее.
__________________
Помогайте новичкам, вы сами ими когда-то были!!!

Старый 16.11.2010, 20:00
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 9  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Я в таком случае обычно создаю отдельный класс в котором добавляю ENTER_FRAME слушатель, а он уже в свою очередь запускает цикл в массиве (находящемся в каком либо другом классе или в этом же) с объектами которые нужно перемещать.

Код AS3:
public function moveStuff():void 
{
      for (var i in someArray) {
            someArra[i].x += (bla bla);
            someArra[i].y += (bla bla);
      }
}
И лучше всего всегда ставить значение переменной weakReference такого слушателя на true. В таком случае можно избежать утечек памяти, которые часто вызывает ENTER_FRAME при неправильном использовании

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Сообщение от Morozov1982 Посмотреть сообщение
Не забывайте читать не только последний пост, но и предыдущие, тогда картина становится немного яснее.
Я читал всю тему, честное слово, а в ней вы только спрашивали как правильно обрабатывать массивы объектов...

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

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

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


 


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


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