我有一个自定义节点,它有一个重写的xScale setter。 E.g:
-(void)setXScale:(CGFloat)xScale
{
[super setXScale:xScale];
NSLog(@"Scale changed to: %f", xScale);
}
如果我手动设置xScale属性,那么我可以看到触发了setter。
但是,如果我通过动作缩放节点,例如:
[myCustomNode runAction:[SKAction scaleXTo:2.0f duration:0.5f]];
然后即使节点被正确缩放,也不会调用setter。
有人知道为什么不呢? SKScale操作如何改变节点的比例?
答案 0 :(得分:4)
内部Sprite Kit使用C ++渲染引擎。我的观察是SKAction完全绕过Objective-C层,而是直接在C ++类上更改属性。可能会改善行动的表现。
如果要观察此类更改,请使用customActionWithDuration:actionBlock:
操作通过块设置节点的属性。或者您可以对节点进行子类化,添加previousScale属性,并通过将其与previousScale属性进行比较来定期检查原始比例是否已更改。