这里有一些noobie问题我第一次试图暂停一个场景/节点,希望有人可以帮我理解发生了什么。
我有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 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游戏暂停等?
任何帮助都会很棒我的代码
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
答案 0 :(得分:0)
我建议你不要为你的SKScene
子类创建一个实例变量(ivar)。如果您在某些时候没有将ivar设置为nil,则当您转换到另一个场景时,SpriteKit将不会释放场景。此外,您不需要SKView
的ivar,因为您可以通过self
访问它。以下是如何从视图控制器和场景子类暂停SKView的示例:
在视图控制器中,
暂停SKView
((SKView *)self.view).paused = YES;
并检查视图是否已暂停
if (((SKView *).self.view).paused) {
// Do something
}
在SKScene
子类中(例如GameScene
),
暂停SKView
self.view.paused = YES;
并检查视图是否已暂停
if (self.view.paused) {
// Do something
}
您可以使用委派机制告诉视图控制器暂停其视图或询问VC是否暂停其视图。