Ios 如何将一个方法中的SKSpriteNode添加到另一个类中?
我正在尝试将一个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
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;
}