如何将SKSpriteNode从一个方法添加到另一个类?

时间:2014-01-27 08:46:00

标签: ios objective-c ipad class sprite-kit

我正在尝试将SKSpriteNode一个类添加到另一个类MainMenu,这是SKScene的子类。我创建的用于定义这些方法的DumpTruckFramework类是SKSpriteNode的子类(这可能是问题所在?)。以下是我正在使用的所有代码:

#DumpTruckFramework.h

#import <SpriteKit/SpriteKit.h>

@interface DumpTruckFramework : SKSpriteNode

-(void)createDumpTruckMainBody;

@end

#DumpTruckFramework.m

#import "DumpTruckFramework.h"

@implementation DumpTruckFramework

-(SKNode*)setupDumpTruckMainBody{

    SKSpriteNode *mainBody = [SKSpriteNode spriteNodeWithImageNamed:@"Dump_Truck_Main_Body.png"];

    mainBody.name = @"";
    mainBody.scale = 0.5;
    mainBody.position = CGPointMake(300, 400);

    return mainBody;
}

-(void)createDumpTruckMainBody{

    SKNode *mainBody = [self setupDumpTruckMainBody];

    [self addChild:mainBody];

}

@end

以上是我在MainMenu类中使用的方法来添加mainBody精灵。也许问题可能是[self addChild:mainBody];代码行,因为self指的是DumpTruckFramework类?

#MainMenu.h

#import <SpriteKit/SpriteKit.h>

@interface MainMenu : SKScene

@end

#MainMenu.m

#import "MainMenu.h"
#import "DumpTruckFramework.h"

@implementation MainMenu

-(id)initWithSize:(CGSize)size{

    if (self = [super initWithSize:size]){

        //[self createMainMenuTitle];

        DumpTruckFramework *dumpTruck = [[DumpTruckFramework alloc] init];

        [dumpTruck createDumpTruckMainBody];

    }

    return self;
}

现在我认为正在发生的是该方法确实有效,但没有达到预期效果。由于MainMenu场景是显示节点的,因此它被声明为“可观看场景”。

希望有人可以帮我解决这个问题,欢呼。

3 个答案:

答案 0 :(得分:1)

您没有在场景中添加精灵节点。您可以将createDumpTruckMainBody更改为:

-(SKNode*)createDumpTruckMainBody{

    SKNode *mainBody = [self setupDumpTruckMainBody];

    return mainBody;

}

并在主菜单中将代码更改为:

-(id)initWithSize:(CGSize)size{

    if (self = [super initWithSize:size]){

        //[self createMainMenuTitle];

        DumpTruckFramework *dumpTruck = [[DumpTruckFramework alloc] init];

        SKNode *node = [dumpTruck createDumpTruckMainBody];

        [self addChild: node];

    }

    return self;
}

希望这有帮助。

答案 1 :(得分:1)

您可以将dumpTruck添加到MainScene:[self addChild: dumpTruck];

答案 2 :(得分:0)

正在发生的事情是你正在创建一个DumpTruckFramework的实例,它几乎立即超出范围,因此被销毁:

-(id)initWithSize:(CGSize)size{
    if (self = [super initWithSize:size]){
        DumpTruckFramework *dumpTruck = [[DumpTruckFramework alloc] init];
        [dumpTruck createDumpTruckMainBody];
        // dumpTruck destroyed here
    }
    return self;
}

所以你的问题是范围之一。看起来您需要使用实例变量来维护DumpTruckFramework