• ベストアンサー

ActionScript で写真を水平に回転させる方法

複数の写真をランダムで水平に回転させたいのですが、 ActionScript でどの function を使えば良いかご存知ですか? ムービークリックでも試してみたのですが、 画像が時計周りに回転するのを防ぐ方法はありますでしょうか? 作りたいものは Apple の Core Animation のビデオで 残り1分40秒に出てくるようなイメージです。 http://www.news.com/1606-2_3-6103330.html

質問者が選んだベストアンサー

  • ベストアンサー
  • is_may
  • ベストアンサー率65% (58/89)
回答No.2

僕の記述が悪かったようです。申し訳ありません;; xRotation関数を↓のと置き換えてください。 function xRotation (tar:MovieClip) { tar.loc1 = 0; tar.loc3 = tar._width / -2; tar.loc4 = tar._x - tar.loc3; tar.onEnterFrame = function () { this.loc1 += 5; if (this.loc1 > 360) { this._xscale = 100; this._x = this.loc3+this.loc4; delete this.onEnterFrame; } else { this.loc2 = this.loc1 * Math.PI / 180; this._xscale = Math.cos (this.loc2) * 100; this._x = Math.cos (this.loc2) * this.loc3 + this.loc4; } }; } 回転を終了するときに最初のサイズ・位置に戻すようにしています。 また、deleteでonEnterFrameを削除してもその回にサイズ・位置変更が行われてしまっていたのでelseでくくってます。(ひょっとしたら8、9行目は必要ないかもしれませんね。けど一応・・。)

yasu182
質問者

お礼

試してみたところ、完璧に動きました。 また一つプログラミングの面白さを体験出来て感謝です。 今月末に出る Leopard でも こんなことが簡単に出来るそうなので、 とても楽しみです。 ありがとうございました。

その他の回答 (1)

  • is_may
  • ベストアンサー率65% (58/89)
回答No.1

~単調に回す方法~ 1.新規にムービークリップを作成し、回したい写真をその中に入れて座標を(0,0)にし、ステージに配置します。 2.配置した写真入りムービークリップをクリックしてアクションパネルを出し、以下を記述します。 onClipEvent (enterFrame) { this.loc1 += 5; if (this.loc1 > 360) { this.loc1 -= 360; } this.loc2 = this.loc1 * Math.PI / 180; this._xscale = Math.cos (this.loc2) * 100; this._x = Math.cos (this.loc2) * this.loc3 + this.loc4; } onClipEvent (load) { this.loc1 = 0; this.loc3 = this._width / -2; this.loc4 = this._x - this.loc3; } 3.プレビューすれば横方向に回転します。 二行目の「5」は回転速度です。値が大きくなるほど速く回ります。 また、スクリプト内の「_xscale」、「_x」、「_width」をそれぞれ「_yscale」、「_y」、「_height」にそれぞれ変更すれば縦方向に回ります。 ~好きなタイミングに指定したムービークリップを一回だけ回転させる方法~ 1.(上の1.の手順) 2.フレームアクションで function xRotation (tar:MovieClip) { tar.loc1 = 0; tar.loc3 = tar._width / -2; tar.loc4 = tar._x - tar.loc3; tar.onEnterFrame = function () { this.loc1 += 5; if (this.loc1 > 360) { delete this.onEnterFrame; } this.loc2 = this.loc1 * Math.PI / 180; this._xscale = Math.cos (this.loc2) * 100; this._x = Math.cos (this.loc2) * this.loc3 +this.loc4; }; } を記述します。上のアクションは、 xRotation(***); という風に実行して一度だけ回すアクションです。「***」には回転させるムービークリップのインスタンス名(ターゲット)が入ります。(↓参考) 3.配置した写真入りムービークリップのインスタンス名を「photo1」にし、フレームアクション xRotation(_root.photo1); を2.の下に追加します。 4.プレビューすれば一度だけ回転して止まります。 このアクションを利用すれば、参照映像のようなものがFlashで実現できます。

yasu182
質問者

お礼

丁寧な解説本当にありがとうございます。 ここで三角関数を使うとは夢にも思いませんでした。 コードを見ても半分しか理解してないのですが。。 5 x 3 の15枚ほど並べてみまして、 とてもシャレた感じに仕上がり感動です。 よろしければ一つだけお伺いしたいのですが、 10分ほどグルグル回してると ほんの1,2ミリだけ ずれてしまうのですが、 解決策ありますでしょうか? 定期的に this._x をオリジナルの位置に戻すのも一つの手ですね。 私がセットアップに使ったコードはこんな感じです。 function xRotation2() { hit = Math.floor(Math.random() * 15) + 1; trace(hit); if(hit<10) xRotation(eval('mc00' + hit)); else xRotation(eval('mc0' + hit)); } setInterval(xRotation2, 5000);

関連するQ&A