我正在尝试将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
场景是显示节点的,因此它被声明为“可观看场景”。
希望有人可以帮我解决这个问题,欢呼。
答案 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
。