为什么[SKAction scaleXTo:duration:]不会调用xScale setter?

时间:2014-02-25 13:12:16

标签: sprite-kit skaction

我有一个自定义节点,它有一个重写的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操作如何改变节点的比例?

1 个答案:

答案 0 :(得分:4)

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

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