![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
|
|||||
|
Регистрация: Oct 2006
Сообщений: 26
|
Цитата:
На деле - исходная точка пули и блоки могут быть где угодно.В итоге имею два варианта: - первый (кто точно знает - 'aBlt.slice()' создает копию исходного массива при КАЖДОЙ итерации или только один раз при вхождении в цикл?) for each(var m:MovieClip in aBlt.slice()){ if(mBlck.hitTestObject(m)){ m.fnHit(); this.removeChild(m); aBlt.splice(aBlt.indexOf(m), 1); } } var m:MovieClip; var i:int=aBlt.length-1; while(i){ m=aBlt[i]; if(mBlck.hitTestObject(m)){ m.fnHit(); this.removeChild(m); aBlt.splice(aBlt.indexOf(m), 1); } i--; } ====================================================================================== Цитата:
..проверил таким способом: ... trace("start"); for each(var m:MovieClip in fnMy()){ if(mBlck.hitTestObject(m)){ m.fnHit(); this.removeChild(m); aBlt.splice(aBlt.indexOf(m), 1); } } trace("end"); ... function fnMy():Object{ trace("fn"); return aBlt.slice(); } Получается ф-ция вызывается только один раз при первом входе в цикл. ====================================================================================== Более быстрым оказался цикл 'while': Странное поведение 'for each' при 50% отсеивания ![]() (NNN=-1) Отсеивается 100%......while: 60.....for each: 95 (NNN=5000) Отсеивается 50%.....while: 32.....for each: 645!! (NNN=20000) Отсеивается 0%.....while: 3.......for each: 3 var aBlt:Vector.<Object> = new Vector.<Object>(); // массив для хранения пуль var obj:Object; var o:Object; var t:int; var i:int; mBlck.x=NNN; stage.addEventListener(Event.ENTER_FRAME, fn1); stop(); function fn1(event:Event):void{ for(i=0; i<10000; i++){ obj=new Object(); obj.x=i; aBlt.push(obj); } var t = getTimer(); i=aBlt.length-1; while(i){ o=aBlt[i]; if(o.x>mBlck.x){ fnZ(o); aBlt.splice(i, 1); } i--; } tOut.text="" + (getTimer()-t); /* var t = getTimer(); for each(o in aBlt.slice()){ if(o.x>mBlck.x){ fnZ(o); aBlt.splice(aBlt.indexOf(o), 1); } } tOut.text="" + (getTimer()-t); */ } function fnZ(tmp:Object):void { var zzz:Object=tmp; } Последний раз редактировалось SiDDD; 08.03.2011 в 18:27. |
![]() |
Часовой пояс GMT +4, время: 01:47. |
|
|
« Предыдущая тема | Следующая тема » |
|
|