2014-03-13 4 views
-1

필자는 Sprite Kit 기반 게임에 몇 가지 기술을 통합하여 테스트하고 있으며, 나는 간단한 작업이라는 것을 알아 채고 있습니다.현재 SKScene의 속성에 액세스합니까?

내가 사용중인 테스트 프로젝트는 Spine을 스프라이트 키트와 통합 한 프레임 워크의 일부로 제공되었습니다. 모든 것은 하나의 ViewController에 포함되고 정의됩니다.이 뷰는 현재 어떤 옵션이 UISegmentedControl에 선택되어 있는지에 따라 네 가지보기 중 하나를 만듭니다. 화면 하단에서 나는 작업에 매여있는 UISwitch 있습니다

-(IBAction)changeCostume:(UISwitch *)sender { 

    if(sender.on) { 
     NSLog(@"New costume"); 

    } else { 
     NSLog(@"Old costume"); 
    } 
} 

내가 일하고 있어요 장면은 다음과 같이 정의된다 :

+ (SKScene *) buildAvatarWithSize:(CGSize) size 
{ 
    SpineSkeleton *avatar = [DZSpineSceneBuilder loadSkeletonName:@"test-avatar" scale:1]; //json 
    spSkeleton_setSkinByName(avatar.spineContext->skeleton, "test-avatar"); 
    spSkeleton_setSlotsToSetupPose(avatar.spineContext->skeleton); 

    DZSpineSceneDescription *sceneDesc = [DZSpineSceneDescription description]; 

    ... define animations etc. here... 

    NSArray *nodes = [sceneDesc buildScene]; 

    SKNode *placeHolder = [SKNode node]; 
    placeHolder.position = CGPointMake(100, size.height); 

    placeHolder.name = @"root"; 

    ... more setup code... 

    SKScene *scene = [[SKScene alloc] initWithSize:size]; 
    scene.scaleMode = SKSceneScaleModeAspectFill; 
    scene.backgroundColor = [UIColor whiteColor]; 

    [scene addChild:placeHolder]; 

    return scene; 
} 

내가 액세스하려는 속성 sceneDesc입니다 - UISwitch을 누르면 즉시 내용을 수정해야합니다. 장면 설정 코드 내에서 가능하다는 것을 알고 있지만 장면이 화면에 나타나면이를 수행하는 방법을 파악하는 데 문제가 있습니다.

이 속성 값을 변경하면 다양한 노드에서 사용되는 SKTexture이 변경됩니다.

아마도 내가 Objective-C에 대해 아직 익숙하지 않다는 것과 프로젝트의 설정이 내가 지금까지 어떻게 작업했는지와 다르다는 것을 알 수 있습니다. (장면을 자신의 클래스와 속성 프로그래밍 방식으로 쉽게 액세스 할 수 있음).

답변

1

스위치를 누르면 NSNotificationCenter를 사용하여 씬에 메시지를 보낼 수 있습니다.

-1

는 실제로 프로그래밍 방식 sceneDesc에 액세스하려고 포기, 그냥 관련 SKSpriteNode의의 텍스처 변경 :

SKSpriteNode *root = (SKSpriteNode *)[placeHolder.children[0] childNodeWithName:@"root"]; 

SKSpriteNode *arm = (SKSpriteNode *)[root childNodeWithName:@"upper arm"]; 

SKSpriteNode *upperArm = (SKSpriteNode *)[arm childNodeWithName:@"upper arm"]; 
SKSpriteNode *lowerArm = (SKSpriteNode *)[[arm childNodeWithName:@"bone3"] childNodeWithName:@"lower arm"]; 

upperArm.texture = [SKTexture textureWithImageNamed:@"blue_sleeve_upper"]; 
lowerArm.texture = [SKTexture textureWithImageNamed:@"blue_sleeve_lower"]; 
관련 문제