I m writing a game. I have StartScene class: In 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 is a method, where all the main game stuff is executed. I have a pause button and all buttons of that menu in StartScene class. The problem for now is with the restart button. So when I call pause method (that is in StartScene class) by hitting pause button,
tView.GameState=GamePaused;
this is executed in pause method. The state of the game is changed. In PlayScene class I got pause method that is being called all the time
-(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 取消]
, 但是
if (gameMechThread.isCancelled) {
[NSThread exit];
}
is not working as if it was really canceled, so I commented it for now.
threadStop
is a property, but in PlayScene class it is changed not on main thread, so that condition doesn t work properly either.
And now the problem with (gameMechThread.isExecuting)
. That while condition is called before [NSThread exit];
is executed, but the program doesn t stay in while condition until [NSThread exit];
is executed as if that thread is already stopped.
Could you please help with deleting the thread, before a new thread in ([self startGame];
) is called.