Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 当前场景的访问属性?_Ios_Objective C_Sprite Kit - Fatal编程技术网

Ios 当前场景的访问属性?

Ios 当前场景的访问属性?,ios,objective-c,sprite-kit,Ios,Objective C,Sprite Kit,我正在测试几种不同的技术来集成到我的精灵套件驱动的游戏中,我确信这是一项简单的任务 我正在使用的测试项目是与Sprite工具包集成的框架的一部分。所有内容都包含(并定义)在一个ViewController中(根据当前选择的UISegmentedControl选项,创建四个视图中的一个)。在屏幕底部,我有一个ui开关,它连接到一个动作: -(IBAction)changeCostume:(UISwitch *)sender { if(sender.on) { NSLog(

我正在测试几种不同的技术来集成到我的精灵套件驱动的游戏中,我确信这是一项简单的任务

我正在使用的测试项目是与Sprite工具包集成的框架的一部分。所有内容都包含(并定义)在一个ViewController中(根据当前选择的
UISegmentedControl
选项,创建四个视图中的一个)。在屏幕底部,我有一个
ui开关
,它连接到一个动作:

-(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
——当按下
ui开关时,我需要动态修改它的内容。我知道在场景设置代码中是可能的,但是我很难弄清楚一旦场景出现在屏幕上怎么做

更改此属性的值将更改各个节点中使用的
SKTexture


我对Objective-C还是新手,这可能没有什么帮助,而且项目的设置与我迄今为止的工作方式大不相同(将场景拆分为它们自己的类,这些类的属性可以通过编程轻松访问).

按下开关时,您可以使用NSNotificationCenter向场景发送消息。

我实际上放弃了以编程方式访问
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"];