0

オーバーライドされた xScale セッターを持つカスタム ノードがあります。例えば:

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

xScale プロパティを手動で設定すると、セッターがトリガーされていることがわかります。

ただし、アクションを介してノードをスケーリングすると、次のようになります。

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

ノードが正しくスケーリングされても、セッターは呼び出されません。

理由を知っている人はいますか?SKScale アクションはノードのスケールをどのように変更しますか?

4

1 に答える 1

4

内部的に Sprite Kit は C++ レンダリング エンジンを使用します。私の観察では、SKAction は Objective-C レイヤーを完全にバイパスし、代わりに C++ クラスのプロパティを直接変更します。アクションのパフォーマンスを向上させる可能性があります。

このような変更を観察したい場合はcustomActionWithDuration:actionBlock:、ブロックを介してノードのプロパティを設定するアクションを使用します。または、ノードをサブクラス化し、previousScale プロパティを追加して、previousScale プロパティと比較して元のスケールが変更されたかどうかを定期的にチェックすることもできます。

于 2014-02-25T14:28:17.003 に答える