我有一张背景图片适用于所有场景,是否可以在某处编写背景代码,这样我就不必在每个场景上编写它,如果是那么我需要把它放在哪里?现在我使用这个基本代码:
background = [SKSpriteNode spriteNodeWithImageNamed:@"backMenu.png"];
titleBackground.position = CGPointMake(CGRectGetMidX(self.frame),CGRectGetMidY(self.frame));
titleBackground.size = self.frame.size;
titleBackground.zPosition = -10;
[self addChild:background];
答案 0 :(得分:1)
如果您有一个在场景中重复的代码,那么您可以创建一个BaseScene
并将该代码放在那里。因此,场景之间共享的所有内容都会进入BaseScene
。
<强> BaseScene.h:强>
#import <SpriteKit/SpriteKit.h>
@interface BaseScene : SKScene
@end
<强> BaseScene.m 强>
#import "BaseScene.h"
@interface BaseScene()
@property(nonatomic, strong) SKSpriteNode *background;
@end
@implementation BaseScene
-(void)didMoveToView:(SKView *)view{
self.background = [SKSpriteNode spriteNodeWithImageNamed:@"backMenu"];
[self addChild:self.background];
}
@end
GameScene.h (现在GameScene
继承自BaseScene
,而不是SKScene
)
#import <SpriteKit/SpriteKit.h>
#import "BaseScene.h"
@interface GameScene : BaseScene
@end
<强> GameScene.m 强>
#import "GameScene.h"
@implementation GameScene
-(void)didMoveToView:(SKView *)view {
/* Setup your scene here */
[super didMoveToView:view];
}
@end
最后,在[super didMoveToView:view];
的每个子类中调用BaseScene
,调用BaseScene的didMoveToView:
,然后将背景节点添加到当前场景。
答案 1 :(得分:0)
SKNode
只能属于一个场景。因此,您需要为每个场景添加背景SKSpriteNode
。
假设您将根据需要创建和销毁场景,您应该做的是保留对SKTexture
背景的引用。
然后在这种情况下,在需要时创建SKSpriteNode
background = [SKSpriteNode spriteNodeWithTexture:backgroundTex];
然后,您可以根据应用程序将其添加到场景中。
在上面的示例中,backgroundTex
将是您的参考。你应该把它藏在一些维护它的对象中。如果你有一个纹理管理器,你应该能够通过引用名称请求已经分配的纹理。