![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Apr 2006
Адрес: Ekaterinburg
Сообщений: 7
|
есть вот такой код:
i = 0; Int = setInterval(mc_clip, 1000); function mc_clip() { i++; s = random(2); man = attachMovie("mc_clip", "clip"+i, i); man._y = 190+random(90); man.speed = 1+random(2); if (s == 0) { man._x = -20; man._xscale = 100; } if (s == 1) { man._x = 220; man._xscale = -100; } man.onEnterFrame = function() { if (this._y>=this._parent._y) { this.swapDepths(this._parent.getNextHighestDepth()); } if (this._xscale == 100) { this._x += this.speed; } if (this._xscale == -100) { this._x -= this.speed; } }; } |
|
|||||
|
Регистрация: Sep 2005
Сообщений: 950
|
Если я правильно понял чего вы хотите, то можно попробывать вот так
var arr:Array = new Array() i = 0; Int = setInterval(mc_clip, 1000); function mc_clip() { i++; s = random(2); man = attachMovie("mc_clip", "clip"+i, i); man._y = 190+random(90); for(var j:Number = 0;j<arr.length;j++){ if (man._y>=arr[j]._y) { man.getNextHighestDepth(); } } arr.push(man) man.speed = 1+random(2); if (s == 0) { man._x = -20; man._xscale = 100; } if (s == 1) { man._x = 220; man._xscale = -100; } man.onEnterFrame = function() { if (this._xscale == 100) { this._x += this.speed; } if (this._xscale == -100) { this._x -= this.speed; } }; } |
|
|||||
|
Регистрация: Apr 2006
Адрес: Ekaterinburg
Сообщений: 7
|
Цитата:
![]() |
|
|||||
|
Модрон-ветеринар
|
Немного сталкивался с такой задачей (игрушку делал), решил так - на каждое событие onEnterFrame добавляю в некий служебный массив инфу о мувиках в обертке объектов (каждму мувику соответствует пара - ссылка на сам мувик и его координата _y) , этот массив после его наполнения с каждым EnterFrame сортирую по убыванию _y, затем сообразно новому индексу мувика в массиве меняю его уровень . Массив удаляю. Это происходит непрерывно.
Нашел старый исходник, немного поправил нужный кусок под ваши реалии, и причесал. var countHero:Number = 0; this.createEmptyMovieClip('heroes', 0); var createHeroes:Number = setInterval(mc_clip, 1000); function mc_clip() { countHero++; s = random(2); man = heroes.attachMovie('mc_clip', 'hr' + countHero, countHero); man._y = 190 + random(90); man.speed = 1 + random(2); if (s == 0) { man._x = -20; man._xscale = 100; } if (s == 1) { man._x = 220; man._xscale = -100; } } this.onEnterFrame = function () { var arr:Array = new Array(); for (var h in heroes) { var hero:MovieClip = heroes[h]; //выбираем очередной мувик по очереди hero._x += hero.speed * (hero._xscale / 100); //скорость var obj:Object = { x:hero._x, y:hero._y}; heroes.localToGlobal(obj); arr.push( { mc:hero, y:obj.y } ); //добавляем в массив пару: ссылка на мувик и его _y } trace('========ПЕРЕСОРТИРОВКА========='); arr.sortOn('y', Array.DESCENDING | Array.NUMERIC ); //сортируем по _y по нисходящей for (var i in arr) { trace(i + ' ' + arr[i].mc + ' ' + arr[i].y); //выведет новый индекс мувика + ссылку на него + коорд. _y (приведенную к _root) //можно будет увидеть, что мувики с младшими номерами имеют более низкую координату _y //остается только свапнуть мувик сообразно его номеру, и подстраховавшись от удаления возможно уже имеющегося //сама процедура свапа var hero:MovieClip = arr[i].mc; var hisNextLevel:Number = parseInt(i) + 1; hero.swapDepths(hisNextLevel); //swap внутри heroes } delete arr; }; Ужасное количество обработчиков onEnterFrame на каждом мувике (в вашем коде) я убрал, все решает одна общая функция. Метод localToGlobal тут остался от моего рабочего проекта, группы персонажей там были в разных контейнерах и бегали не в общем, и нужно было привести все их координаты к _root, чтобы можно было сравнить, кто кого должен закрывать. Но, наверное, тоже решение не самое лучшее. У меня хорошо работало, мувиков совсем было немного. Однако, если заинтересуетесь, то трейсы уберите, и не забывайте об удалении тех мувиков, кто ушел за пределы, иначе быстро начнутся тормоза. Рабочий пример во вложении. Разумеется, все очень компактно в рабочем варианте - в цикле добавили мувики во временный массив, конец цикла, пересортировка, свап в цикле на полагающийся уровень. Через несколько миллисек. - по новой. PS. Я не очень понял, какое наложение надо. Если над наоборот, то просто заменяете строку на - то есть убираете Array.DESCENDING и получается как бы имитация пространственной перспективы, более приближено к жизни.
__________________
Идите первым! Последний раз редактировалось mooncar; 14.02.2012 в 01:46. |
|
|||||
|
Регистрация: Apr 2006
Адрес: Ekaterinburg
Сообщений: 7
|
Цитата:
![]() |
|
|||||
|
Модрон-ветеринар
|
Пожалуйста. Если вопросы именно по этой реализации, пишите, там есть нюансы. "z-сортировка", если не ошибаюсь, называется.
Может быть кто попроще выдаст идею.
__________________
Идите первым! |
![]() |
![]() |
Часовой пояс GMT +4, время: 10:42. |
|
|
« Предыдущая тема | Следующая тема » |
|
|