所有场景一张背景图片 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:,后者又将背景节点添加到当前场景。