我创建了一个小游戏(仅限xaml,而不是xna),这个游戏有4个xaml页面:MainPage,ChoseLevelPage,PlayingPage和ScorePage 我第一次玩游戏时,游戏运行顺畅(从MainPage导航 - > ChoseLevelPage - > PlayingPage) 当关卡完成后,它从PlayingPage导航 - > scorePage - >的MainPage
但是我第二次选择了一个级别并且玩(MainPage - > ChoseLevelPage - > PlayingPage),动作选择级别(来自ChoseLevelPage - > PlayingPage)需要这么长时间,并且在PlayingPage中的游戏玩法也非常滞后,有时候崩溃了我的应用
我的PlayingPage包含一个MediaElement(级别的播放歌曲),DispatcherTimer(降低关卡时间),以及每2秒后重复一次的StoryBoard(每个转弯级别)
在OnNavigatedFrom事件中,我将媒体元素和故事板设置为停止,但我不知道它们是否从内存中清除(以及我在PlayingPage中使用的其他资源)?
void dispatcherTimer1_Tick(object sender, EventArgs e)
{
if (time > 0) // this variable cout the time left, decreased by 1 second
{
time --;
}
else // when "time" =0, stop the level and navigate to ScorePage
{
dispatcherTimer1.Stop(); // stop the dispatcher
NavigationService.Navigate(new Uri("/Pages/ScorePage.xaml", UriKind.Relative));
}
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
myStoryboard.Stop(); // stop the story board
meSong.Stop(); // stop the mediaelement
App.MyModel.PlayingSong = null; // set source of the medialement to null
base.OnNavigatedFrom(e);
}
答案 0 :(得分:1)
当您返回MainPage时,请务必清除后台,否则您之前的PlayingPage实例将保留在内存中,可能会解释您所面临的问题。
您可以使用简单的循环清除backstack,最好是在MainPage的OnNavigatedTo
事件中:
while (this.NavigationService.BackStack.Any())
{
this.NavigationService.RemoveBackEntry();
}