【问题标题】:Why does [SKAction scaleXTo: duration:] not invoke the xScale setter?为什么 [SKAction scaleXTo: duration:] 不调用 xScale 设置器?
【发布时间】:2014-02-25 22:28:17
【问题描述】:

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

【问题讨论】:

    标签: sprite-kit skaction


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的回答。很高兴知道这不仅仅是我在文档中遗漏的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 2013-12-02
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多