I'm writing a game. I have StartScene class: In StartScene.h:
@interface StartScene : UIView <UITextFieldDelegate> {
...
PlayScene* tView;
NSThread* gameMechThread;
}
PlayScene is an inherited class
@interface PlayScene : StartScene {
}
So in when I call PlayScene view, I call
- (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];
// }
}
So the game is paused. When I hit the restart button
-(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];
}
Is called. One problem is that there is [gameMechThread cancel];
, but
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.