なぜ[Skaction Scalexto:Duration:] XSCALEセッターを呼び出さないのですか?
-
21-12-2019 - |
質問
オーバーライドされたXSCALEセッターを持つカスタムノードを持っています。e.g。:
-(void)setXScale:(CGFloat)xScale
{
[super setXScale:xScale];
NSLog(@"Scale changed to: %f", xScale);
}
.
手動でXSCALEプロパティを設定した場合は、セッターがトリガーされているのがわかります。
ただし、アクションを介してノードを拡大縮小する場合は、[myCustomNode runAction:[SKAction scaleXTo:2.0f duration:0.5f]];
.
そのノードが正しくスケーリングされていても、セッターは呼び出されません。
誰かがなぜされていないのですか?Skscaleアクションはノードのスケールをどのように変更しますか?
解決
内部的にスプライトキットはC ++レンダリングエンジンを使用します。私の観察は、スカッションがObjective-Cレイヤーを完全にバイパスし、代わりにC ++クラス上のプロパティを直接変更します。行動のパフォーマンスを向上させる可能性があります。
そのような変更を守りたい場合は、ブロックを介してノードのプロパティを設定するcustomActionWithDuration:actionBlock:
アクションを使用します。または、ノードをサブクラス化し、前のスケールプロパティを追加し、元のスケールがそれを前のScaleプロパティと比較して変更したかどうかを定期的に確認することができます。
所属していません StackOverflow