[英]Game fps shutting down
我為場景游戲創建了View Controller。 當我從Game Over ViewController重新啟動游戲時,fps關閉。 第一次我的fps是30+,當我重新啟動游戲時它會關閉到20,然后再次重新啟動它會關閉到10 ...有時我會看到此錯誤:不平衡調用GameOverViewController的開始/結束外觀轉換:0x9bb8490> 。
ViewController.m
- (void)awakeFromNib {
[[NSNotificationCenter defaultCenter]
addObserver:self
selector:@selector(goToGameOverViewController:)
name:@"GoToGameOverViewController"
object:nil];
}
-(void)goToGameOverViewController:(NSNotification *) notification {
GameOverViewController *gameOverController = [self.storyboard instantiateViewControllerWithIdentifier:@"GameOverViewController"];
[self.navigationController pushViewController:gameOverController animated:NO];
}
------------------------------------------------------------------------------
MyScene.m
- (void)gameOver {
[[NSNotificationCenter defaultCenter]
postNotificationName:@"GoToGameOverViewController" object:self];
}
GameOverView.m
-(void)playPressed
{
GameViewController *gameController = [self.storyboard instantiateViewControllerWithIdentifier:@"GameViewController"];
[self.navigationController pushViewController:gameController animated:YES];
}
-(void)createPlayButton
{
UIButton *playBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[self.view addSubview:playBtn];
playBtn.frame = CGRectMake(100, 100, 200, 44);
[playBtn setTitle:@"Play Again" forState:UIControlStateNormal];
[playBtn sizeToFit];
[playBtn addTarget:self action:@selector(playPressed) forControlEvents:UIControlEventTouchUpInside];
}
您的代碼和方法有幾個核心問題:
UIViewController
推送到UINavigationController
。 相反,也許在游戲結束后,您調用popToRootViewControllerAnimated:
或其他。 您在堆棧上壓入的每個UIViewController
都會永遠存在。 NSNotificationCenter
刪除觀察者。 這意味着每次完成關卡時,每個viewController都會嘗試推送GameOver viewController。 這就是導致“不平衡...”警告的原因。 如果您遵循#1的建議,則只需要覆蓋dealloc並調用以下代碼即可解決該問題。 在playPressed
使用以下代碼:
GameViewController *gameController = [self.storyboard instantiateViewControllerWithIdentifier:@"GameViewController"];
[self.navigationController setViewControllers:@[gameController] animated:YES];
然后在GameViewController
-(void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self]
}
這將確保釋放您的ViewController,從而確保您的場景,並且您沒有多個ViewController嘗試同時推送游戲。
確保從ViewController
離開時釋放您的SKScene
:
-(void)goToGameOverViewController:(NSNotification *) notification {
[((SKView *)self.view) presentScene:nil];
GameOverViewController *gameOverController = [self.storyboard instantiateViewControllerWithIdentifier:@"GameOverViewController"];
[self.navigationController pushViewController:gameOverController animated:NO];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.