2017-04-09 37 views
0

我只是Flash的初學者,我無法解決這個問題。閃存執行循環 - 每擊一次只帶走一次健康

我該如何讓每個命中的動作只執行一次?

這是我的代碼:

stage.addEventListener(Event.ENTER_FRAME,loop); 
function loop (event:Event):void 
    { 
      for (var i:int = hBottleArray.length-1; i >= 0; i--){ 
     if (runner.hitTestObject(hBottleArray[i])){ 
      health++; 
      hBottleArray.removeAt(i); 
     } 
      } 
for (var i:int = killerarray.length-1; i >= 0; i--){ 
    if (runner.hitTestObject(killerarray[i])){ 
     health--; 
     killerarray.removeAt(i); 
     sign1.x-=40; 
     tip1.x-=40; 
     bg.x-=40; 
     secretmessage.x-=40; 
     healthbottle1.x-=40; 
     killer.x-=40; 
     killer2.x-=40; 
     killer3.x-=40; 
     platform.x-=40; 
    } 
} 
    if (bg.x>327) 
    { 
     sign1.x-=40; 
     tip1.x-=40; 
     bg.x-=40; 
     secretmessage.x-=40; 
     healthbottle1.x-=40; 
     killer.x-=40; 
     killer2.x-=40; 
     killer3.x-=40; 
     platform.x-=40; 
    } 
} 

結果: 它是一種警告,並在輸出面板中的另一個錯誤.. 警告3596:重複的變量定義。 OUTPUT PANEL:TypeError:錯誤#1006:removeAt不是函數。 在ObstacleCourse_fla :: MainTimeline /環路()

請幫助如何解決

FOR NEAL DAVIS我使用Flash播放器11.2 r2o2

請大家注意,這是不整個腳本

+0

如果您使用的是Flash Player,則使用哪個版本?這是一個Air應用程序嗎?要使用removeAt,您需要Flash播放器19或更高版本或Air 19或更高版本。如果您使用的是舊版本,請根據我對此的評論進行升級或使用'.splice'。 –

回答

0

要使用我談論的評論方法:

比方說,你有3個保健瓶叫healthbottle1

var hBottleArray:Array = [healthbottle1,healthbottle2,healthbottle3]; 

那麼你的遊戲主循環內:

for (var i:int = hBottleArray.length-1; i >= 0; i--){ 
    if (character.hitTest(hBottleArray[i])){ 
     health++; 
     // any code you want to execute for when a health bottle is picked up 
     hBottleArray.removeAt(i);//this removes the bottle from the array so it doesn't get checked again. This will stop your continued health increase. 
    } 
} 

for (var的部分是「for循環」的開始。你可以谷歌。另一個技巧是使用數組。 Google也是如此。

+0

所以你告訴我,for(var是循環開始本身?如果是的話,我是否必須把它放在我所製作的遊戲循環中?我不必,對吧?我只能在陣列中使用一個元素嗎?我有很多問題,但我認爲健康 - 會減少數量,而不會增加...我是否必須刪除我的生物瓶gameloop?我現在有一個混合起來的大腦..對不起!再次! – Oran153

+0

是把它放在遊戲循環中 –

+0

是的,你可以有一個只有1的數組 –

1

不要使用visible屬性,因爲這不會消除瓶子或敵人(它仍然存在,導致腳本觸發每一幀,你只是看不到它)

而不是使用healthbottle1.parent.removeChild(healthbottle1);或沿着這些線路。

這是做什麼是從稱爲顯示列表中刪除對象。谷歌「AS3顯示列表」的更多信息。

你可以對殺手做同樣的事情,但我認爲你不希望它們在擊中玩家後消失。相反,您可以使用某種反擊技能立即將玩家放回(足夠的像素以使敵人停止擊中他),或者讓玩家在1秒或2秒內無敵。許多遊戲都實現了這種類型的機制(經典的是在無敵期間使角色閃現的視覺效果)。如果您選擇其中一種方法,請嘗試一下,讓我們知道您是否卡住了。祝你好運。

+0

尼爾戴維斯我不知道該怎麼做當玩家擊中殺手時的無敵/無懈可擊的部分...對不起,但我可以問,如何? – Oran153

+0

我也使用removechild的東西,並在輸出面板中出現這樣:TypeError:錯誤#1009:無法訪問空對象引用的屬性或方法。 \t在ObstacleCourse_fla :: MainTimelineline/loop() 而且它仍然不斷增加健康no – Oran153

+0

您的.visible部分按照您的意圖工作嗎?它消失了嗎? –

0

Ok @Neal davis我只是把這個瓶子拿出舞臺而殺手沒有陣列,所以感謝你的幫助! 我寧願在未來學習未來的答案(Duh xD)並搜索它們,所以我會避免在這裏提出很多問題在stackoverflow ...但它也有用的人回答這個問題... XD謝謝!