2016-04-08 64 views
0

對於所有場景,我有一個用於背景的圖像,是否有可能爲背景編寫某處代碼,因此我不必將它寫在每個場景中,並且如果它在那裏我需要把它放?現在我用這個基本代碼:所有場景的一個背景圖像目標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]; 
+0

你可以用你所有的設置創建'SKSpriteNode'的子類,但是如果你想在場景中使用它,我認爲你仍然需要將它添加到場景中。 – Gliderman

回答

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(現在GameSceneBaseScene繼承,而不是從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的每個子類,調用BaseScene,這反過來又增加了背景節點到當前場景的didMoveToView:[super didMoveToView:view];

0

一個SKNode只能屬於一個場景。因此,您需要爲每個場景添加背景的SKSpriteNode

假設您將根據需要創建和銷燬場景,您應該做的是維護對背景的參考SKTexture

那麼在這種情況下,需要

background = [SKSpriteNode spriteNodeWithTexture:backgroundTex]; 

這樣,你會添加此基礎上您的應用程序時的情景創建SKSpriteNode

在上面的例子中,backgroundTex將是您的參考。你應該把它存儲在一個維護它的對象中。如果你有一個紋理管理器,你應該可以通過引用名稱來請求已經分配的紋理。