我们在这里简要地提到了能够返回到以前的场景的概念:PG/DesigningGameswithSpriteKit/DesigningGameswithSpriteKit.html
除此之外,我找不到更多关于这个问题的文件。我知道,在其他框架(如Cocos2D )中,您可以在堆栈上弹出场景,甚至可以同时运行多个场景。
我如何让它在SpriteKit中工作。
我有一个游戏与一个滑动菜单的字符选择。在选择一个字符时,场景将更改为另一个菜单。我希望用户能够按下一个后退按钮,并呈现上一个场景,在那里,他们选择的字符在全视图中。
现在,我已经把前一幕呈现为一个新的场景。哪一个原因创建它在一个新的状态,第一个字符在普通视图,而不是他们选择的字符。
这应该是非常简单的,但对于我的谷歌搜索,我不知道如何实现。
发布于 2014-07-31 03:10:41
我不知道是否有人还在检查这个问题,但我相信我有另外一个方法来解决这个问题。
我定制了一个"PauseScene“,用户可以设置返回场景,这意味着当您准备返回时,PauseScene的视图将显示返回场景。下面是代码:
PauseScene.h
#import "MAScene.h"
@interface PauseScene : MAScene
@property (weak, nonatomic, readonly) SKScene * returnScene;
-(void)setReturnScene:(SKScene *)otherScene;
@endPauseScene.m
#import "PauseScene.h"
#import "MASpriteButton.h"
@interface PauseScene ()
@property (strong, nonatomic) MASpriteButton * resumeButton;
@end
@implementation PauseScene
-(void)setReturnScene:(SKScene *)otherScene
{
_returnScene = otherScene;
}
-(void)didMoveToView:(SKView *)view
{
[self createContent];
}
-(void)createContent
{
__weak typeof(self) weakMe = self;
MASpriteButton * resume = [[MASpriteButton alloc] initWithBackgroundImageNamed:@"cardback.png" andSelectedImageNamed:@"cardback.png" andCallbackBlock:^{
NSLog(@"removing...");
[weakMe.view presentScene:self.returnScene];
}];
resume.size = CGSizeMake(self.widthToHeightRatio * 20, self.heightToWidthRatio * 20);
resume.position = CGPointMake(self.size.width/2, self.size.height/2);
self.resumeButton = resume;
[self addChild:self.resumeButton];
[self setBackgroundColor:[UIColor blueColor]];
}
@end我使用它的方式是,当用户点击游戏场景中的暂停按钮时,我将这些行称为:
self.paused = YES;
PauseScene * pScene = [[PauseScene alloc] initWithSize:self.size];
[pScene setReturnScene:self];
[self.view presentScene:pScene];注意,这个小块中的self是游戏场景。
通过使暂停场景保持到游戏场景的弱指针,当暂停场景被取消时,它可以保持指向返回场景的指针而不去分配它。
PS -- MAScene类只是SKScene类的一个小扩展,我只是向它添加了一些东西。如果有人也想要的话,请告诉我。
发布于 2013-12-11 00:18:31
假设菜单场景也在Sprite Kit中实现,您可以创建一个模态视图控制器,呈现它,并将Sprite场景放在该模态视图之上。
因此,具体来说,创建一个新的UIViewController继承类MenuViewController和一个新的SKScene继承类MenuScene。类“MenuScene”MenuScene应该是您想要呈现的场景。将MenuScene和MenuViewController连接起来,就像通常会挂起SKScene及其视图控制器一样。确保将原始场景的视图控制器作为原始SKScene的属性。
无论您想在哪里显示该菜单,都可以从原始SKScene调用:
MenuViewController *modalViewController = [[MenuViewController alloc] init]; [self.viewController presentModalViewController:modalViewController];
有一些简单的方法可以只转换b/w SKScene实例,但是如果您想让初始SKScene在后台运行,我相信这就是您必须做的事情。
发布于 2014-03-15 15:09:45
在调用new之前,您应该保留指向离开场景的强指针。
下面是通过单例实现的例子(实际上通常使用场景指针,没有魔法)
@interface Global : NSObject
+ (Global*)sharedInstance;
@property (strong, nonatomic) SKScene *mainScene;
@end和.m文件
@implementation Global
+ (instancetype) sharedInstance{
static Global *_sharedInstance = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedInstance = [[Global alloc] init];
});
return _sharedInstance;
}
@endhttps://stackoverflow.com/questions/20507790
复制相似问题