![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Переписал свой код по созданию частиц, теперь удобней с ним работать (двумерный массив).
Чтобы избежать этого "косяка" с зависанием стандартного Твина я решил очищать массив как он заполняется под сотню Спрайтов и их твинов. По коду видно, я хотел бы, чтобы спрайты и твины создавались снова с 0 в массиве, после того, как их число дойдет до сотни. Но, увы и ах, ссылка в массив не заменяет старые твины и спрайты. Как мне сделать проверку на существование уже этих твинов и спрайтов и полностью их стереть? Вы понимаете, думаю, о чем я. Помните игры, экшны, где следы от пуль на стене не бесконечные. Старые особенно. Например Half-Life 1. Там если есть к примеру 50 следов, следующие следы появляются с удалением самых старых следов. Так же и я хочу сделать. Частиц 100 - начинает с начала. Самые первые частицы и следующие за ними по очереди исчезают. На выводе - непрерывное создание частиц, никаких зависаний. Вот код, тоже можно протестировать: import fl.transitions.*; import fl.transitions.easing.*; import flash.events.Event; import flash.display.MovieClip; import flash.display.Sprite; var where:String = new String(); var c_radius:Number = new Number(); var _ypos:Number = new Number(); var ground:Number = new Number(); var howlong:Number = new Number(); var howlongdrop:Number = new Number(); var maxnumber:Number = new Number(20); var totalnumber:Number = new Number(0); var particles:Array = new Array(); ground = stage.stageHeight; function startspawning() { addEventListener(Event.ENTER_FRAME, spawn); } function stopspawning() { removeEventListener(Event.ENTER_FRAME, spawn); } function spawn(e:Event) { if (totalnumber > maxnumber) { totalnumber = 0; } howlongdrop = Math.ceil(Math.random() * 300) / 100; howlong = Math.ceil(Math.random() * stage.stageWidth); _ypos = Math.ceil(Math.random() * stage.stageHeight); c_radius = Math.ceil(Math.random() * 10); particles[totalnumber] = new Array(); particles[totalnumber][0] = new Sprite(); particles[totalnumber][0].graphics.beginFill(0x000000, 2); particles[totalnumber][0].graphics.drawCircle(0,0,c_radius); particles[totalnumber][0].graphics.endFill(); particles[totalnumber][0].y = _ypos; particles[totalnumber][0].alpha = Math.ceil(Math.random() * 100) / 100; addChild(particles[totalnumber][0]); particles[totalnumber][1] = new Tween(particles[totalnumber][0],"x",Strong.easeOut,particles[totalnumber][0].x,particles[totalnumber][0].x + howlong,2,true); particles[totalnumber][2] = new Tween(particles[totalnumber][0],"y",Bounce.easeOut,particles[totalnumber][0].y,ground,howlongdrop,true); totalnumber++; } startspawning(); Для теста можете условие про totalnumber>maxnumber полностью удалить - посмотрите, зависания исчезнут, но все начнет заполняться пока не затормозит как невесть что. Хотелось бы эти вот "зависалки" и удалять ![]() Добавлено через 1 час 11 минут По сути существует два варианта. Оставить массив расширяться до бесконечности просто делая removeChild у каждой частицы после окончания движения, или же сделать как я хотел - с 100 элементов максимум. Первый вариант уже есть готовый, но я не знаю, чем чревато бесконечно расширение массива и по моему более оптимизированный вариант с удалением старых, только я не знаю как. |
![]() |
Часовой пояс GMT +4, время: 19:04. |
|
|
« Предыдущая тема | Следующая тема » |
|
|