簡體   English   中英

游戲fps關機

[英]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];
}

您的代碼和方法有幾個核心問題:

  1. 您不斷將UIViewController推送到UINavigationController 相反,也許在游戲結束后,您調用popToRootViewControllerAnimated:或其他。 您在堆棧上壓入的每個UIViewController都會永遠存在。
  2. 您永遠不會從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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM