我正在写游戏。我有 StartScene 类:在 StartScene.h 中:
@interface StartScene : UIView <UITextFieldDelegate> {
...
PlayScene* tView;
NSThread* gameMechThread;
}
PlayScene 是一个继承类
@interface PlayScene : StartScene {
}
所以在我调用 PlayScene 视图时,我调用
- (void)gameMechThread {
gameMechThread = [[NSThread alloc]initWithTarget:self selector:@selector(gameMech) object:nil];
[gameMechThread start];
}
gameMech 是一种方法,所有主要的游戏内容都在其中执行。我在 StartScene 类中有一个暂停按钮和该菜单的所有按钮。现在的问题是重启按钮。所以当我通过点击暂停按钮调用暂停方法(即在 StartScene 类中)时,
tView.GameState=GamePaused;
这是在暂停方法中执行的。游戏状态发生变化。在 PlayScene 类中,我得到了一直被调用的 pause 方法
-(void)pause {
while (self.gameState==GamePaused) {
}
if (self.gameState == GameRestarted) {
// self.threadStop = 2;
[NSThread exit];
}
// if (gameMechThread.isCancelled) {
// [NSThread exit];
// }
}
所以游戏暂停了。当我按下重启按钮时
-(void)restart {
[gameMechThread cancel];
[tView.player stop];
tView.gameState=GameRestarted;
self.gameState=GameRestarted;
...
// while (tView.threadStop != 2) { }
// tView.threadStop = 1;
while (gameMechThread.isExecuting) { }
[tView removeFromSuperview];
[self startGame];
}
叫做。一个问题是有[gameMechThread cancel];
,但是
if (gameMechThread.isCancelled) {
[NSThread exit];
}
好像它真的被取消了一样不起作用,所以我现在评论它。
threadStop
是一个属性,但在 PlayScene 类中它不是在主线程上更改的,因此该条件也无法正常工作。
而现在的问题(gameMechThread.isExecuting)
。在执行之前调用了 while 条件[NSThread exit];
,但程序不会停留在 while 条件中,直到[NSThread exit];
执行,就好像该线程已经停止一样。[self startGame];
在调用 ( ) 中的新线程之前,请您帮忙删除线程。