Cocos2d-xの研究ノート(11)MoveByメソッドのMoveTo

1. MoveByメソッドのMoveTo

方法は、2つの平行移動ノードである、MoveByメソッドは、現在の位置から移動されます。MoveToすることにより、世界のサブクラスは、位置を調整するために動いているされています。

1.1メンバ変数やメソッドを作成します

メインMoveByメソッドのメンバ変数やメソッドは、主要なステートメントを作成します。

_is3D BOOL; 
Vec3 _positionDelta; //開始点の反対側に配置された端座標
Vec3 _startPositionを; //座標開始
Vec3 _previousPositionを; //座標setPosition回

ActionInterval :: initWithDuration(期間)); 
_positionDelta = deltaPosition。
_is3D =はtrue。

メインのMoveToメンバ変数やメソッドは、主要なステートメントを作成します。

Vec3 _endPositionは、世界の端座標系を設定//座標
; BOOL _is3D 
Vec3 _positionDeltaを; //世界のセットの相対座標に座標
Vec3 _startPosition; //開始座標
Vec3 _previousPosition; // setPosition上の座標

ActionIntervalを:: initWithDuration(DURATION); _endPosition
=位置。

1.2 startWithTarget方法

MoveByメソッド:

ActionInterval :: startWithTarget(ターゲット)。
_previousPosition = _startPosition =標的- > getPosition3D();

へ引っ越す:

MoveByメソッド:: startWithTarget(ターゲット)。
_positionDelta = _endPosition -標的- > getPosition3D();

1.3アップデート方法

メソッドMoveByメソッドは、メインロジックを更新します。

_target-> setPosition3D(_startPosition + _positionDelta *時間)

更新は、親のMoveTo MoveByメソッドの更新です。

MoveByメソッドupdateメソッドのCC_ENABLE_STACKABLE_ACTIONS:

#ifのCC_ENABLE_STACKABLE_ACTIONS 
        Vec3 currentPos = _target-> getPosition3D(); 
        Vec3差分= currentPos - _previousPosition。
        _startPosition = _startPosition + DIFF。
        Vec3 newPos = _startPosition +(_positionDelta * tの); 
        _target-> setPosition3D(newPos)。
        _previousPosition = newPos。
#else 
        _target-> setPosition3D(_startPosition + _positionDelta * T)。
#endifの

このマクロは、デフォルトは1で定義し、条件付きコンパイルです。

条件付きコンパイルプロセスは、コンパイラの最初の部分は、コードをコンパイルしています。マクロの条件が満たされた場合、コンパイラは、そうでない場合、コンパイラは、このコードはコンパイルされません無視する、コードをコンパイルします。

操作複数の同じノードで動作する場合、マクロの定義を開いた後、複数のアクションの組み合わせ効果のノードの移動パターン。

この最後のセットの位置及び操作により現在位置を算出する差分最初のずれ量は、そのような動きに基づいて別の操作の前のノード、そのずれ量を用いて初期座標を再計算します。

唯一の操作は、ずれ量が0の場合、変更されません開始座標。

その他1.4

MoveToを使用している場合、それはのMoveTo MoveByメソッドになっていrunAction関数文のノードノード初期位置と異なる関係を設定します。

コードは以下の通りであります:

//错误
のMoveTo * myAction =のMoveTo ::(5、VEC2(50,50を作成します)); 
SP-> runAction関数(myAction)。
SP-> setPosition(VEC2(50,50 ))。
this-> はaddChild(TOM)。 //正确 のMoveTo * myAction =のMoveTo ::(5、VEC2(50,50を作成します));  SP-> setPosition(VEC2(50,50 ))。SP-> runAction関数(myAction)。this->はaddChild(TOM)。

その理由は、runAction関数がstartWithTargetのMoveByメソッドを呼び出すことです:

_positionDelta = _endPosition  - 標的 - > getPosition3D(); // へ引っ越す

初期位置、上記_endPosition等しい_positionDeltaを設定された第1 runAction関数はその後、最後の座標は、始動が相対座標を座標私たちが望む結果ではないとなりました。 

おすすめ

転載: www.cnblogs.com/deepcho/p/cocos2dx-action-moveby-moveto.html