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