2014-01-27 2 views
0

SKSceneNode 한 클래스를 SKScene의 하위 클래스 인 MainMenu 클래스에 추가하려고합니다. 이러한 메서드를 정의한 DumpTruckFramework 클래스는 SKSpriteNode하위 클래스입니다 (문제 일 수 있음). 위메서드에서 다른 클래스에 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 

나는 mainBody 스프라이트를 추가 MainMenu 클래스에서 사용하는 방법 : 아래는 내가 사용하고있는 모든 코드입니다. 어쩌면 자기가 DumpTruckFramework 클래스를 참조하는 것처럼 코드 라인이 [self addChild:mainBody]; 일 수 있습니까?

#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 장면은 노드를 표시하기위한 것이므로 "보기 가능 장면"으로 선언됩니다.

누군가가이 문제를 해결할 수 있기를 바랍니다. 무슨 일

답변

1

씬에 스프라이트 노드를 추가하고 있지 않습니다. 이 도움이

-(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; 
} 

희망 :

-(SKNode*)createDumpTruckMainBody{ 

    SKNode *mainBody = [self setupDumpTruckMainBody]; 

    return mainBody; 

} 

및 메인 메뉴로 코드를 변경 : 당신은 createDumpTruckMainBody에 변경할 수 있습니다.

+0

위대한 작품! 내 이해에서 여기서 뭘하는지 궁금한 점은'createDumpTruckMainBody' 반환 값 이름을 node로 대체 한 다음 장면에 추가하는 것입니다. 내가 틀렸다면 나에게 맞춰주세요. 제가 왜 무언가를해야하는지에 대한 좋은 견해를 얻고 싶습니다. @ 그렉 – Mutch95

+1

예, 맞습니다. 저는 그냥 createDumpTruckMainBody에서 SKNode를 반환하고 MainMenu의 장면에 추가합니다. MainMenu는 SKScene의 하위 클래스이므로 addChild를 호출 할 때 노드를 장면에 추가합니다. 귀하의 코드에서 볼 수없는 노드를 장면에 추가하지 않는 SKSpriteNode 하위 클래스의 addChild :를 호출합니다. – Greg

0

는 거의 즉시 범위 밖가는 DumpTruckFramework의 인스턴스를 생성하는, 따라서 파괴 :

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

그래서 문제는 범위 중 하나입니다. DumpTruckFramework을 유지 관리하기 위해 인스턴스 변수를 사용해야하는 것 같습니다.

+0

어떻게하면 좋을까요? – Mutch95

+0

@ Mutch95 제가 말했듯이, 인스턴스 변수를'MainMenu'에 추가하십시오. – trojanfoe

+0

너무 좋아? @implementation MainMenu { DumpTruckFramework * dumpTruck; }' – Mutch95

1

MainScene에 dumpTruck을 추가 할 수 있습니다 : [self addChild: dumpTruck];.

관련 문제