Просмотр полной версии : Подскажите как лучше организовать движение большого количества объектов
Dragon rideR
30.08.2010, 09:50
Подскажите как лучше организовать движение большого кол-ва объектов?
Есть 2 варианта:
1. Каждому объекту назначить обработчик ENTER_FRAME и двигать
2. Сделать глобальный обработчик ENTER_FRAME , а каждому объекту задавать вектор движения и двигать все объекты из единого обработчика.
Как будет быстрее и правильнее?
Вариант 2.
Если можно сделать один обработчик, зачем создавать много?
Если характер движения имеет закономерность в зависимости от номера объекта, в этой функции вычисляйте координаты движения циклом по объектам.
Если нет, создайте массив координат, тоже все циклом и используйте массив для вычислений.
Dragon rideR
30.08.2010, 10:43
ага спасибо так и думал
Morozov1982
16.11.2010, 08:00
Вариант 2.
Если можно сделать один обработчик, зачем создавать много?
Если характер движения имеет закономерность в зависимости от номера объекта, в этой функции вычисляйте координаты движения циклом по объектам.
Если нет, создайте массив координат, тоже все циклом и используйте массив для вычислений.
А можете простой пример написать, или ссылочку на аналогичный урок или исходник, тоже интересна эта тема.
Заранее благодарю.
Допустим, на сцене 10 мувиков - mc1, mc2...mc10.
Тогда:
this.onEnterFrame = function()
{
for (i = 1; i <= 10; i++)
{
var mc:MovieClip = this['mc' + i];
mc._x += 5;
mc._y += 2;
}
}
Нелинейное движение (вводится параметр, зависящий от номера):
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.
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++;
}
}
Если мувики в контейнере, но при этом их неопределенное количество и они непоименованы:
this.onEnterFrame = function()
{
for (i in cont_mc)
{
var mc:MovieClip = cont_mc[i];
mc._x += 5;
mc._y += 2;
}
}
В общем, насколько у вас хватит фантазии, желания и опыта.
С массивом примера не привожу, забивать координатами сил нету. :)
Скажу только, что массив нужен многомерный.
PS. Тему бы в AS2, автор топика сразу об EnterFrame заговорил...
Morozov1982
16.11.2010, 14:54
Благодарю, оч. хорошие примеры, но все-таки хотелось бы с массивом, могу даже подкинуть, к примеру:
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]];
Снова, заранее благодарю.
Благодарю, оч. хорошие примеры, но все-таки хотелось бы с массивом, могу даже подкинуть, к примеру:
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]];
Снова, заранее благодарю.
??? А что должно получится из этого?
Morozov1982
16.11.2010, 19:43
Это массив координат парами [_x,_y], они (пары) представляют собой траекторию движения объектов.
Отвечая на вопрос "??? А что должно получится из этого?", скажу объекты должны начать двигаться по этой траектории.
Не забывайте читать не только последний пост, но и предыдущие, тогда картина становится немного яснее.
Я в таком случае обычно создаю отдельный класс в котором добавляю ENTER_FRAME слушатель, а он уже в свою очередь запускает цикл в массиве (находящемся в каком либо другом классе или в этом же) с объектами которые нужно перемещать.
public function moveStuff():void
{
for (var i in someArray) {
someArra[i].x += (bla bla);
someArra[i].y += (bla bla);
}
}
И лучше всего всегда ставить значение переменной weakReference такого слушателя на true. В таком случае можно избежать утечек памяти, которые часто вызывает ENTER_FRAME при неправильном использовании
Не забывайте читать не только последний пост, но и предыдущие, тогда картина становится немного яснее.
Я читал всю тему, честное слово, а в ней вы только спрашивали как правильно обрабатывать массивы объектов...
Morozov1982
17.11.2010, 05:25
Название темы:
"Подскажите как лучше организовать движение большого количества объектов"
Пост 2:
"...Если нет, создайте массив координат, тоже все циклом и используйте массив для вычислений."
Пост 5:
"С массивом примера не привожу, забивать координатами сил нету.
Скажу только, что массив нужен многомерный."
Пост 6:
"все-таки хотелось бы с массивом, могу даже подкинуть, к примеру"
Как вам, по-моему все ясно.
Как вам, по-моему все ясно.
Ну что могу сказать .... ясней некуда.
Ключевое слово: particles
есть несколько хороших движков.
аесли без движков гляньте исходники тут (http://www.nulldesign.de/exp/expviewer.php?file=f9_particle2.swf&width=500&height=400)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.