怎么再玩一个方法?

时间:2014-03-01 00:03:54

标签: ios objective-c

我有一个游戏,当游戏结束时,游戏画面(gameoverscreen.png)可见(以前隐藏),并且按钮似乎再次播放。我尝试做的是为它创建一个IBAction,然后在该动作中重新加载viewDidLoad。

示例:

 -(IBAction)restartGame:(id)sender{

     [self viewDidLoad]; //to reload the screen
     gameoverscreen.hidden = YES; 
     replayButton.hidden = YES; 

 }

我认为这会重新加载屏幕,但它只是出现了半秒钟,然后游戏画面再次可见。我认为它与我的NSTimer有关,但是gameoverscreen.hidden = NO;时计时器无效,所以它不是那个..为什么它不能正确重新加载屏幕,并允许用户再次播放?

3 个答案:

答案 0 :(得分:1)

我不能回答这个问题,但我可以给出建议......这就是我想象你的起始代码看起来像......

 -(void)viewDidLoad
 {
     NSTimer *t = [some timer code to start the loop and process events]
     //init some other state stuff, arrays of rects etc.
 }

 -(IBAction)restartGame:(id)sender{

     [self viewDidLoad]; //to reload the screen
     gameoverscreen.hidden = YES; 
     replayButton.hidden = YES; 

 }

这是你的代码应该是这样的:

 -(void)viewDidLoad
 {
     [self restartGame];

 }
- (void)setUpInitalGameState
{
     //init some other state stuff, arrays of rects etc.
}
- (void)start
{
     NSTimer *t = [some timer code to start the loop and process events]


}

 -(IBAction)restartGame:(id)sender{

     [self setUpInitialGameState];
     [self start];
 }

答案 1 :(得分:1)

您不应该调用viewDidLoad将游戏重置为启动状态。让viewDidLoad只在应用程序启动时自动调用一次,然后手动重置游戏中的变量和位置。在viewDidLoad中,您应该加载游戏中使用的任何图像,音频和初始化变量。在一个单独的函数中处理游戏重置,格式类似于下面的格式:

(IBAction)resetGame:(id)sender{

    // Set positions of all images to a starting state.

    // Change image visibilities as desired.

    // Reset all game variables to the initial state.
}

我的iOS游戏SlothDrop只调用一次viewDidLoad。当游戏结束时,所有对象都在屏幕上进行动画处理并重新定位,然后在屏幕上对它们进行动画处理。在任何时候都没有再次加载视图,所有对象都只是四处移动。您可以在此处查看我在免费版中重置游戏的方式:https://itunes.apple.com/us/app/slothdrop-free/id789603341?mt=8&uo=4

答案 2 :(得分:-1)

通过这种方式,您需要完全重新启动控制器,然后将其推送到屏幕。