所有场景一张背景图片 objective c
One background image for all scenes objective c
我有一个图像作为所有场景的背景,是否可以在某个地方编写背景代码,这样我就不必在我得到的每个场景上都写它,如果是,那么我需要把它放在哪里?现在我使用这个基本代码:
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];
一个SKNode
只能属于一个场景。因此,您需要为每个场景添加背景的 SKSpriteNode
。
假设您将根据需要创建和销毁场景,您应该做的是为背景维护对 SKTexture
的引用。
那么在那种情况下,在需要时创建 SKSpriteNode
background = [SKSpriteNode spriteNodeWithTexture:backgroundTex];
然后您可以根据您的应用将其添加到场景中。
在上面的示例中,backgroundTex
将是您的参考。你应该把它藏在维护它的某个对象中。如果你有一个纹理管理器,你应该能够通过引用名称请求已经分配的纹理。
如果您有一个在场景中重复的代码,那么您可以创建一个 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
最后,您在 BaseScene
的每个子类中调用 [super didMoveToView:view];
,后者调用 BaseScene 的 didMoveToView:
,后者又将背景节点添加到当前场景。
我有一个图像作为所有场景的背景,是否可以在某个地方编写背景代码,这样我就不必在我得到的每个场景上都写它,如果是,那么我需要把它放在哪里?现在我使用这个基本代码:
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];
一个SKNode
只能属于一个场景。因此,您需要为每个场景添加背景的 SKSpriteNode
。
假设您将根据需要创建和销毁场景,您应该做的是为背景维护对 SKTexture
的引用。
那么在那种情况下,在需要时创建 SKSpriteNode
background = [SKSpriteNode spriteNodeWithTexture:backgroundTex];
然后您可以根据您的应用将其添加到场景中。
在上面的示例中,backgroundTex
将是您的参考。你应该把它藏在维护它的某个对象中。如果你有一个纹理管理器,你应该能够通过引用名称请求已经分配的纹理。
如果您有一个在场景中重复的代码,那么您可以创建一个 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
最后,您在 BaseScene
的每个子类中调用 [super didMoveToView:view];
,后者调用 BaseScene 的 didMoveToView:
,后者又将背景节点添加到当前场景。