0

我有一个自定义节点,它有一个被覆盖的 xScale 设置器。例如:

-(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 动作如何改变节点的规模?

4

1 回答 1

4

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

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

于 2014-02-25T14:28:17.003 回答