我正在测试一些不同的技术,以集成到我的Sprite Kit驱动的游戏中,而且我对我确信这是一项简单的任务感到磕磕绊。
我正在使用的测试项目是将Spine与Sprite Kit集成的框架的一部分。所有内容都包含(并定义)在一个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,并且项目的设置与我迄今为止的工作方式有很大的不同(将场景分成他们自己的类,具有以下属性:可以通过编程方式轻松访问。
答案 0 :(得分:1)
按下开关时,您可以使用NSNotificationCenter向场景发送消息。
答案 1 :(得分:-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"];