簡單的問題,但我不能得到它的工作。 所以我只是有一個顯示對象,一個球的類。我從Main.as 創建它的實例並運行一個for循環來檢查我是否擊球,如果我這樣做,我想刪除該對象。 但我不能。Actionscript 3.0 - 試圖刪除一個孩子
我的代碼有什麼問題?
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.ui.Mouse;
import flash.events.TimerEvent;
import flash.utils.Timer;
public class Main extends Sprite
{
private var clay:Clay;
private var clayCollection:Vector.<Clay> = new Vector.<Clay>;
private var crash:Crash;
private var crashCollection:Vector.<Crash> = new Vector.<Crash>;
private var timer:Timer = new Timer(0);
private var newClayTimer:Timer = new Timer(1000);
public function Main()
{
newClayTimer.start();
newClayTimer.addEventListener(TimerEvent.TIMER, addNewClay);
stage.addEventListener(MouseEvent.CLICK, checkForHit);
}
private function checkForHit(e:MouseEvent):void
{
if (clayCollection.length > 0)
{
for (var i:int = 0; i < clayCollection.length; i++)
{
if (e.target.hitTestObject(clayCollection[i]))
{
clayCollection.splice(i, 1);
removeChild(clayCollection[i]);
}
}
}
}
private function addNewClay(e:TimerEvent):void
{
clay = new Clay();
addChild(clay);
clayCollection.push(clay);
}
}
}
如果您在命中測試代碼塊中放置了一個斷點,它會觸發嗎?如果是這樣,如果您在removeChild代碼行之後移動代碼拼接線(以便您要刪除的對象仍然位於集合中的索引處),會發生什麼情況?另外,在每個「粘土」對象上添加點擊監聽器會不會更簡單?然後你會知道哪一個被點擊了,因爲它會成爲事件的當前目標。 –
嗨,我試圖改變位置與拼接和removechild,但它給了我相同的對象引用錯誤。我不知道是否在每個對象上放置一個偵聽器只會增加代碼和CPU的能力。 – MindGem
如果你只是在你關心的對象而不是任何對象的情況下觸發一個監聽器,那麼CPU使用率會更低。它不會添加任何代碼......只需將addEventListener代碼移動到addNewClay中,但它只會是一行(指的是新粘土而不是舞臺)。 –