【发布时间】:2014-11-23 00:00:39
【问题描述】:
我第一次尝试暂停场景/节点,希望有人可以帮助我了解正在发生的事情。
我有 2 个 VC GameViewController.m(包含我的 GameUI 相关代码) GameScene.m(包含我的游戏相关代码和名为“myWorld”的主节点)。
来自 GameViewController.m 如果我运行
_scene.paused = YES;
从外观上看,屏幕上的一切都暂停了,没有任何动作,但是如果我通过以下方式取消暂停游戏
_scene.paused = NO;
您可以告诉我的 GameScene.m “myWorld”节点继续运行,因为当我取消暂停时,游戏会进入超快前进并赶上如果我不暂停时的位置。
我尝试了其他几行,例如
self.view.paused = YES;
然后Xcode建议我改成
self->_skView.paused = YES;
当我这样做时,它起作用了!并成功暂停了所有内容,包括 GameScene.m 中的“myWorld”代码。但是怎么做?我不明白? 谁能告诉我“->”在这里做什么???
另外,在我的其他 VC GameScene.m 中,我的更新方法中有一行代码正在等待游戏通过
暂停if (self.paused==YES)
但是当我从 GameViewController.m "self->_skView.paused = YES;" 运行这个新代码时
这里不满足 if (self.paused==YES) "if" 条件。
GameScene.m
-(void)update:(CFTimeInterval)currentTime {
if (self.paused==YES) {
//do stuff
如何编写“if”条件,以便当 GameViewController.m "self->_skView.paused = YES;" GameScene.m 中是否满足“if”条件?
我想我要问的是如何从一个 VC 与另一个 VC 交谈?或者我如何正确地告诉两个 VC 游戏已暂停等?
下面的代码对我有帮助
GameViewController.m
@implementation GameViewController {
SKView *_skView;
GameScene *_scene;
}
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
if (!_skView) {
_skView =
[[SKView alloc] initWithFrame:self.view.bounds];
GameScene *scene =
[[GameScene alloc] initWithSize:_skView.bounds.size];
scene.scaleMode = SKSceneScaleModeAspectFill;
[_skView presentScene:scene];
[self.view addSubview:_skView];
[self.view sendSubviewToBack:_skView];
_scene = scene;
__weak GameViewController *weakSelf = self;
}
}
//My pause method
//was
//_scene.paused = YES;
//now
self->_skView.paused = YES;
//My unpause method
//was
//_scene.paused = NO;
//now
self->_skView.paused = NO;
GameScene.m
-(void)didMoveToView:(SKView *)view {
SKNode *myWorld = [SKNode node];
[self addChild:myWorld];
-(void)update:(CFTimeInterval)currentTime {
if (self.paused==YES) {
//do stuff
【问题讨论】:
-
当您只暂停场景时,场景的更新方法会继续被调用。如果您暂停视图,它将暂停所有内容。前提是您仅使用 Sprite Kit 计时方法,而不是 NSTimer、performSelector:afterDelay: 或 dispatch_ 计时方法。
-
您可以在更新开始时签入。
if(yourScene.paused) return; -
你能解释一下主要问题是什么吗?