アンケートご協力のお願いgihyo.jpでは,2010年度に向けて豪華プレゼントが当たる読者属性アンケートを実施しております。ご協力ください。

gihyo.jp » DEVELOPER STAGE » 連載 » ActionScript 3.0で始めるオブジェクト指向スクリプティング » 第17回 3D風に回転するアニメーション

ActionScript 3.0で始めるオブジェクト指向スクリプティング

第17回 3D風に回転するアニメーション

前回の第16回「三角関数を使った楕円軌道のアニメーション」では,インスタンスが楕円軌道でアニメーションするフレームアクションを作成した。今回はそのスクリプトに手を加えて,遠近感のある3D風の回転を表現してみたい。

簡易なパースペクティブを与える

前回作成したスクリプト16-4は,第16回の2ページ目からダウンロードできる。ここまでの段階では,インスタンスがただ楕円軌道を描いて回転するだけだ。なお,フレームアクションに確認用に挿入したtrace()関数のステートメントは,コメントアウト(コメント区切り記号で無効化)した。また,この後のアニメーション表現の都合で,インスタンスのイラストは左向きとする(図1)。

図1 インスタンスが楕円軌道を描いて回転する

図1 インスタンスが楕円軌道を描いて回転する

「パースペクティブ」(perspective)とは遠近法を意味する(「パース」と略されることもある)。もっとも,今回はごく簡易な表現で済ませる。修正点はふたつだ。第1に,インスタンスは平面をイメージして,楕円軌道の両端に近づくほど幅を狭くする。第2は,楕円軌道の上を3次元の奥とみなし,上にいくほどインスタンスのサイズを小さくする(図2)。

図2 端にいくほど幅は狭く上にいくほどサイズを小さく

図2 端にいくほど幅は狭く上にいくほどサイズを小さく

インスタンスの幅やサイズを変えるには,DisplayObject.scaleXとDisplayObject.scaleYプロパティを使う。これらのプロパティは,[変形]パネルの幅と高さのスケールに当たる(図3)。ただし,単位はパーセンテージ(%)ではなく,実寸を1.0とする小数値であることに注意しよう(※1)。

図3 [変形]パネルの幅と高さのスケール

図3 [変形]パネルの幅と高さのスケール

遠近感を与えるためのスケールの変更は,新たな関数xScale()を定義して処理することにする。もちろん,この関数もインスタンスのDisplayObject.enterFrameイベント(定数Event.ENTER_FRAME)にリスナーとして加える。まず,第1の幅を変化させる処理から書いていこう(スクリプト1)。

スクリプト1 楕円軌道の端にいくほどインスタンスの幅を狭める

// MovieClip: 回転するインスタンス
var nDegree:Number = 0;
var nRadian:Number = 0;
var nSpeed:Number = 5;
var nDegreeToRadian:Number = Math.PI/180;
var nCenterX:Number = stage.stageWidth/2;
var nCenterY:Number = stage.stageHeight/2;
var nRadiusX:Number = 100;
var nRadiusY:Number = 50;
var nCos:Number = Math.cos(nRadian);
var nSin:Number = Math.sin(nRadian);
addEventListener(Event.ENTER_FRAME, xMoveX);
addEventListener(Event.ENTER_FRAME, xMoveY);
addEventListener(Event.ENTER_FRAME, xScale);   // 追加
addEventListener(Event.ENTER_FRAME, xUpdate);
function xMoveX(eventObject:Event):void {
  x = nCenterX+nCos*nRadiusX;
}
function xMoveY(eventObject:Event):void {
  y = nCenterY+nSin*nRadiusY;
}
function xScale(eventObject:Event):void {   // 追加
  scaleX = nSin;
}
function xUpdate(eventObject:Event):void {
  nDegree += nSpeed;
  nDegree = (nDegree%360+360)%360;
  nRadian = nDegree*nDegreeToRadian;
  nCos = Math.cos(nRadian);
  nSin = Math.sin(nRadian);
}

[ムービープレビュー]を見ると,インスタンスは楕円軌道の端にいくほど幅が狭くなる(図4)。新たに定義した関数xScale()の処理はというと,DisplayObject.scaleXプロパティに単にsin値(nSin)を設定しているだけだ(スクリプト1)。

図4 楕円軌道の端にいくほどインスタンスの幅が狭まる

図4 楕円軌道の端にいくほどインスタンスの幅が狭まる

sinの値の変化は,インスタンスの垂直方向の座標に比例係数として与えた。そして,垂直方向の最下部で最大値1,最上部で-1の値を取った。さらに,楕円軌道の両端になる,垂直方向の中央で値は0になる。忘れてしまった読者は,前回の解説をもう1度読んでほしい。また,DisplayObject.scaleX/DisplayObject.scaleYプロパティの特色として,マイナスの値を与えるとインスタンスが反転する。だから,sin値をそのままプロパティに設定するだけでよいという訳だ。

※1
幅と高さをピクセル単位で指定する場合には,DisplayObject.widthとDisplayObject.heightプロパティを使う。

著者プロフィール

野中文雄(のなかふみお)

ソフトウェアトレーナー,テクニカルライター,オーサリングエンジニア。上智大学法学部卒,慶応義塾大学大学院経営管理研究科修士課程修了(MBA)。独立系パソコン販売会社で,総務・人事,企画,外資系企業担当営業などに携わる。その後,マルチメディアコンテンツ制作会社に転職。ソフトウェアトレーニング,コンテンツ制作などの業務を担当する。2001年11月に独立。Web制作者に向けた情報発信プロジェクトF-siteにも参加する。株式会社ロクナナ取締役(非常勤)。

URLhttp://www.FumioNonaka.com/

著書

  • ActionScript 3.0プロフェッショナルガイド

    ActionScript 3.0プロフェッショナルガイド(毎日コミュニケーションズ)

  • ActionScript 3.0辞典 [FlashPlayer 10/9対応]

    ActionScript 3.0辞典 [FlashPlayer 10/9対応](翔泳社)

コメント

コメントの記入

パスサポ

多数の情報処理技術者試験対策書籍の発行実績を誇る技術評論社がお届けする,資格試験合格サイト「めざせ! 情報処理試験 パスサポ」が開設されました。

ピックアップ

サクセスストーリーに続く,快適サーバー運用管理のヒント!

データの増大,煩雑な管理,システムダウン,セキュリティなど,迫りくる課題からシステム管理者の負担を軽くするポイントを解説します。

gihyo.jp インフラエンジニア情報局

ネットワークやITにかかわるあらゆる業種で必要とされるインフラエンジニアに向けた技術情報や心構え,その魅力について多角的に紹介。

テストエンジニア ステーション

いま,ITに関わるあらゆる開発業務で注目されつつあるテスト系エンジニアをターゲットにしたコンテンツサイトを展開します。

一行クイックアンケート

gihyo.jpで取り上げてほしいネタは?

※検索はページ右上の検索ボックスをご利用ください。

その他の連載

読むウェブ ~本とインタラクション

ディスプレイで読む活字とそのインタラクション(interaction:相互作用)について,最新Webを紹介しながら読み解いていく。

いま,見ておきたいウェブサイト

この連載では,国内外の最新のウェブサイトを隔週更新で取り上げ,これら最新サイトの特徴や素晴らしい部分を,さまざまな角度から解説していきます。

Windows phoneアプリケーション開発入門

Windows Marcketplace for Mobileがサービス開始され,作成したアプリケーションを個人でも世界をターゲットに公開できる環境が整ってきました。これを機にWindows phoneアプリケーションの開発をしてみませんか?

ここは知っておくべき!Windows Server 2008技術TIPS

5年ぶりのサーバOSとなったWindows Server 2008が出荷されて早2年。2009年にはR2が出荷され,再び注目を集めています。発売前から実施したトレーニングによって感じた,インフラエンジニアの方々に知っておいていただきたい機能を中心にご紹介します。

キーパーソンが見るWeb業界

本連載はWeb Site Expert/gihyo.jpとの連動企画です。阿部淳也, 長谷川敦士, 森田雄のお三方による,Web業界をテーマにした座談会です。

きたみりゅうじの聞かせて珍プレー

ソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。みなさんからの投稿もお待ちしてます!

ActionScript 3.0で始めるオブジェクト指向スクリプティング

野中文雄氏が,簡単なスクリプトは書いたことがあるという初級者を対象に,ActionScript 3.0の基本からクラス定義までを解説します。

まだ間に合う「ITパスポート」受験対策 原山先生の短期合格塾

この連載では,4月18日のITパスポート試験の受験に向けて,短い期間で効率良く受験対策を行う方法や,確実に得点するための裏ワザなどを伝授していきます。

連載一覧

gihyo.jp

  • DEVELOPER STAGE
  • ADMINISTRATOR STAGE
  • WEB+DESIGN STAGE
  • LIFESTYLE STAGE
  • SCIENCE STAGE
  • NEWS & REPORT

書籍案内

  • 新刊書籍
  • 書籍ジャンル一覧
  • 書籍シリーズ一覧
  • 新刊ピックアップ
  • ロングセラー
  • 電脳会議

定期刊行物一覧

  • Software Design
  • WEB+DB PRESS
  • Web Site Expert
  • 組込みプレス