0

我正在写游戏。我有 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];在调用 ( ) 中的新线程之前,请您帮忙删除线程。

4

1 回答 1

0

return在 NSThread 中 使用。

if (gameMechThread.isCancelled) {
       return;
}
于 2012-05-24T09:58:52.913 回答