Ios 如何将一个方法中的SKSpriteNode添加到另一个类中?

Ios 如何将一个方法中的SKSpriteNode添加到另一个类中?,ios,objective-c,ipad,class,sprite-kit,Ios,Objective C,Ipad,Class,Sprite Kit,我正在尝试将一个SKSpriteNode类添加到另一个类main menu,它是SKScene的子类。我创建的类DumpTruckFramework定义了这些方法,它是SKSpriteNode的子类(这可能是问题所在?)。以下是我正在使用的所有代码: #DumpTruckFramework.h #import <SpriteKit/SpriteKit.h> @interface DumpTruckFramework : SKSpriteNode -(void)createDum

我正在尝试将一个SKSpriteNode类添加到另一个类
main menu
,它是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
现在我认为正在发生的是,该方法确实有效,但没有达到预期效果。由于
主菜单
场景是用来显示节点的,因此它被声明为“可查看的场景”


希望有人能帮我解决这个问题,干杯。

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

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

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

您没有将精灵节点添加到场景中。您可以将
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;
}

希望这有帮助。

您可以将自卸车添加到主场景:
[self addChild:dumpTruck]

我该怎么做@trojanfoe?@Mutch95就像我说的,在
主菜单中添加一个实例变量
@implementation主菜单{DumpTruckFramework*dumpTruck;}
非常有效!我只是好奇你在这里做什么,据我所知,你正在替换
createDumpTruckMainBody
将值名称返回到节点,然后将其添加到场景中?如果我错了,请纠正我。我想了解为什么我需要做一些事情@GregYes you right。我只需返回createDumpTruckMainBody中的SKNode,然后将其添加到主菜单中的场景中。MainMenu是SKScene的一个子类,因此当您调用addChild时:您将节点添加到场景中。在代码中,您调用addChild:on SKSpriteNode子类,该子类不会将节点添加到场景中,因此您无法看到它。
-(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;
}