调试时AS3错误1009

时间:2016-02-27 16:06:23

标签: actionscript-3

我正在尝试为我的太空船游戏创建一个屏幕游戏,当玩家的盾牌达到0时,它会通过屏幕进入游戏并停止游戏。屏幕上的游戏正在运行,但我无法阻止游戏玩法。当玩家的盾牌达到0但我得到错误1009时,我试图将Ship设置为null。所有游戏玩法对象(Ship,Enemy ......)将加载到“public function fGameStart(evt:Event):void {”的阶段“执行,是否有一种方法可以阻止此功能在游戏结束时运行?非常感谢任何帮助!

await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
    foreach (Source source in sources)
    {
        PivotItem pivotItem = new PivotItem(); /* At this point it falls. */
        pivotItem.Header = source.Name;
        pivotItem.Margin = new Thickness(0, -10, 0, 0);

        ListView listView = new ListView();
        listView.ItemsSource = source.Articles;
        listView.ItemTemplate = (DataTemplate)Resources["MainItemTemplate"];
        listView.ItemClick += OpenArticle_ItemClick;
        listView.SelectionMode = ListViewSelectionMode.None;
        listView.IsItemClickEnabled = true;

        pivotItem.Content = listView;
        pvtMain.Items.Add(pivotItem);
    }
});

1 个答案:

答案 0 :(得分:0)

没有必要将ourShip变量设置为null。它不会从DisplayObject中删除stage,也不会将其从内存中删除。实际上,您收到此错误的原因是您将其设置为null

您需要做的是停止触发loop功能。

public function fGameOver(e: Event) {
    gotoAndStop(4);
    //ourShip = null;
    stage.removeChild(ourShip);
    removeEventListener(Event.ENTER_FRAME, loop);
}

同样为你的听众设置一个弱引用可能是一个坏主意

//addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
//why not:
addEventListener(Event.ENTER_FRAME, loop);