我正在尝试为我的太空船游戏创建一个屏幕游戏,当玩家的盾牌达到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);
}
});
答案 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);