所有场景目标c的一个背景图像

时间:2016-04-08 18:24:42

标签: objective-c sprite-kit skscene

我有一张背景图片适用于所有场景,是否可以在某处编写背景代码,这样我就不必在每个场景上编写它,如果是那么我需要把它放在哪里?现在我使用这个基本代码:

    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];

2 个答案:

答案 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将是您的参考。你应该把它藏在一些维护它的对象中。如果你有一个纹理管理器,你应该能够通过引用名称请求已经分配的纹理。