【问题标题】:One background image for all scenes objective c所有场景目标 c 的一张背景图像
【发布时间】:2016-04-08 18:24:41
【问题描述】:

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

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

【问题讨论】:

  • 您可以使用您的所有设置创建SKSpriteNode 的子类,但如果您想在场景中使用它,我认为您仍然需要将其添加到场景中。

标签: objective-c sprite-kit skscene


【解决方案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

最后,您在 BaseScene 的每个子类中调用 [super didMoveToView:view];,该子类调用 BaseScene 的 didMoveToView:,进而将背景节点添加到当前场景。

【讨论】:

    【解决方案2】:

    SKNode 只能属于一个场景。所以你需要为每个场景的背景添加SKSpriteNode

    假设您将根据需要创建和销毁场景,您应该做的是保持对 SKTexture 的引用作为背景。

    那么在这种情况下,在需要时创建SKSpriteNode

    background = [SKSpriteNode spriteNodeWithTexture:backgroundTex];
    

    然后,您将根据您的应用程序将其添加到场景中。

    在上面的示例中,backgroundTex 将是您的参考。你应该把它藏在一些维护它的对象中。如果你有一个纹理管理器,你应该能够通过引用名称请求已经分配的纹理。

    【讨论】:

      猜你喜欢
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      相关资源
      最近更新 更多