2014-02-25 29 views
0

我有一个具有重写的xScale setter的自定义节点。例如:[SKAction scaleXTo:duration:]为什么不调用xScale setter?

-(void)setXScale:(CGFloat)xScale 
{ 
    [super setXScale:xScale]; 
    NSLog(@"Scale changed to: %f", xScale); 
} 

如果我手动设置xScale属性,那么我可以看到setter被触发。

然而,如果我通过一个动作,例如:缩放节点

[myCustomNode runAction:[SKAction scaleXTo:2.0f duration:0.5f]]; 

则即使节点被正确缩放,设置器永远不会调用。

有人知道为什么不? SKScale操作如何改变节点的规模?

回答

4

内部Sprite工具包使用C++渲染引擎。我的观察是,SKAction完全绕过了Objective-C层,而是直接在C++类上改变属性。可能会改善行动的表现。

如果您想要观察这些变化,请使用customActionWithDuration:actionBlock:操作,该操作通过块设置节点的属性。或者您可以继承该节点的子类,添加previousScale属性,并通过将其与previousScale属性进行比较来定期检查原始比例是否已更改。

+0

感谢您的回答。很高兴知道这不仅仅是我在文档中遗漏的东西。 –

相关问题