なぜ[Skaction Scalexto:Duration:] XSCALEセッターを呼び出さないのですか?

StackOverflow https://stackoverflow.com//questions/22015294

  •  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プロパティと比較して変更したかどうかを定期的に確認することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top