2015年5月27日水曜日

SKAction customActionWithDuration: actionBlock:は要注意?

spriteにActionを設定するメソッドの一つ、
customActionWithDuration:actionBlock:
がよくわからん。

書き方は以下のとおりで、duration値の秒数だけblock構文を繰り返すというもの。
elapsedTimeというのは処理の経過時間秒数。

SKAction *action = [SKAction customActionWithDuration:5
                   actionBlock:^(SKNode *node, CGFloat elapsedTime) {
                     SKAction *ac = [SKAction rotateByAngle:M_PI duration:5.0];
                     [node runAction:[SKAction repeatActionForever:ac]];
                   }];

上の場合、5秒間spriteを回転させるコード。
rotateByAngleのdurationが同じ5秒なので、5秒かけてゆっくり180度回転して止まってくれると思ってた。

しかし実際やってみると、spriteが高速回転して止まらない。
repeatActionForeverを使わないと、5秒経過後、しばらくして止まる。でも高速回転に変わりなし。

durationを設定するメソッドが入れ子になるせいで、処理がおかしくなるんだろうな。

中に変数を使った計算をする処理を入れたら、途中からありえないでかい値になったこともあった。

customActionWithDuration:0
にしたところ、正常動作した。
おそらく0ということはcustomActionWithDurationメソッドは実行されず、block中のActionだけが実行されたから動いたんじゃないかと思う。
じゃあcustomActionWithDuration使う意味ないけどね。

まだよくわからん。

0 件のコメント:

コメントを投稿