我有一个游戏,当游戏结束时,游戏画面(gameoverscreen.png)可见(以前隐藏),并且按钮似乎再次播放。我尝试做的是为它创建一个IBAction,然后在该动作中重新加载viewDidLoad。
示例:
-(IBAction)restartGame:(id)sender{
[self viewDidLoad]; //to reload the screen
gameoverscreen.hidden = YES;
replayButton.hidden = YES;
}
我认为这会重新加载屏幕,但它只是出现了半秒钟,然后游戏画面再次可见。我认为它与我的NSTimer有关,但是gameoverscreen.hidden = NO;
时计时器无效,所以它不是那个..为什么它不能正确重新加载屏幕,并允许用户再次播放?
答案 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)
通过这种方式,您需要完全重新启动控制器,然后将其推送到屏幕。