gihyo.jp » DEVELOPER STAGE » 連載 » ActionScript 3.0で始めるオブジェクト指向スクリプティング » 第11回 MovieClipをスクロールさせる―条件判定

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

第11回 MovieClipをスクロールさせる―条件判定

サムネールを水平に並べてスクロールさせるメニューのインターフェイスがある(図1)。スクロールする方向やスピードは,マウスポインタの位置によって変わる。今回と次回の2回にわたって,このようなMovieClipのアニメーションをつくってみたい。今回のポイントは,条件を判定して分岐する処理の書き方だ。

図1 サムネールがマウスポインタの位置に応じてスクロール

図1 サムネールがマウスポインタの位置に応じてスクロール

ループする水平スクロール―ifステートメント

まずは,これまでの復習として,毎フレーム5ピクセルで水平方向右に単純にスクロールするMovieClipのフレームアクションを書いてみよう(スクリプト1)。スクリプトを書くときは,いきなり目的の動作を実現しようとするのでなく,処理を小分けにして段階的に進めていくことが大切だ。

上級者でも,ひとつのミスもなく,1回で動きを完成することはたやすくない。小分けにして作成と確認を繰返していけば,問題が出たときも,その調査対象を限定できる。事件の早期解決には,何より容疑者の絞り込みが重要なのだ。

スクリプト1 MovieClipインスタンスを水平スクロールさせる

// MovieClip: スクロールさせるインスタンス
var nSpeed:Number = 5;
addEventListener(Event.ENTER_FRAME, xScroll);
function xScroll(eventObject:Event):void {
  x += nSpeed;
}

毎フレームの描画更新は,DisplayObject.enterFrameイベントで受取る。MovieClipインスタンスにこのイベントのリスナー関数を登録して,関数内では初期値として定めたピクセル数をインスタンスのDisplayObject.xプロパティに代入している(図2)。このアニメーションの処理については,これ以上説明の必要はあるまい。

図2 インスタンスを毎フレーム10ピクセル水平方向右にスクロールさせるフレームアクション

図2 インスタンスを毎フレーム10ピクセル水平方向右にスクロールさせるフレームアクション

次は,ステージ右端を超えたら,左端にループしてスクロールを続ける処理だ。インスタンスの水平座標がステージ右端を超えたかどうかの条件を判定する必要がある。ここで,ifステートメントを使う。シンタックスは,次のとおりだ。

if (条件) {
  // 条件が満たされた場合の処理
}

今回の条件は,インスタンスのDisplayObject.xプロパティの値が,ステージ右端の座標値つまりStage.stageWidthを超えたかどうかである。

この条件を表す式は,数学の時間に習った不等式と同じく,不等号(<>)で表す。等しい場合を含めるときは,等号を右に添える(<=>=)。注意しなければならないのは,両辺の値が等しいこと(等価)を示すには,等価演算子(==)が用いられることだ。ActionScriptでは,等号(=)は代入の演算子として区別される。

MovieClipインスタンスの水平座標がステージ右端を超え,if条件が満たされたなら,インスタンスを左端に移動する。ステージ左端の水平座標は,もちろん0である。すると,条件判定のifステートメントは,次のように記述すればよさそうに思える。

if (x>stage.stageWidth) {   // ステージ右端を超えたら
  x = 0;   // ステージ左端に移動
}

実際,[ムーピープレビュー]を確かめると,ステージ右端を超えたインスタンスは,また左端から現れてスクロールを続ける(図3)。アニメーションが,インスタンスひとつであれば,差支えはないかもしれない。しかし,並べてスクロールすると,問題が明らかになる。

図3 インスタンスはステージ右端を超えたら左端からスクロール

図3 インスタンスはステージ右端を超えたら左端からスクロール

なぜなら,ステージ右端からはみ出すピクセル数は,インスタンスによって最小1ピクセルから最大5ピクセルまで異なる可能性がある(図4)。そのピクセル数に関係なく,インスタンスをステージ左端の水平座標0に移動すると,インスタンス同士の間隔が変わってしまう。つまり,ステージ右端を1ピクセルだけ超えて0ピクセルに移動したインスタンスは,5ピクセル超えてようやく0ピクセルにループしたインスタンスより4ピクセル早く進むことができ,後続のインスタンスとは間隔が開いてしまうのである。

図4 ステージからはみ出すピクセル数はインスタンスによって変わる

図4 ステージからはみ出すピクセル数はインスタンスによって変わる

インスタンスの間隔を変えないためには,一律に同じ座標に移すのではなく,一定の距離左に移動すればよい。つまり,水平座標からステージ幅を差引くのである。現在値から数値を差引くときは,演算子-=を用いる。

前述スクリプト1にこの条件判定の処理を加えたのが,以下のスクリプト2である。

スクリプト2 インスタンスがステージ右端を超えたらステージ幅分左に移動

// MovieClip: スクロールさせるインスタンス
var nSpeed:Number = 5;
var nStageLeft:Number = 0;
var nStageRight:Number = stage.stageWidth;
var nStageWidth:Number = nStageRight-nStageLeft;
addEventListener(Event.ENTER_FRAME, xScroll);
function xScroll(eventObject:Event):void {
  x += nSpeed;
  if (x>nStageRight) {   // ステージ右端を超えたら
    x -= nStageWidth;   // ステージ左端に移動
  }
}

著者プロフィール

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

ソフトウェアトレーナー,テクニカルライター,オーサリングエンジニア。上智大学法学部卒,慶応義塾大学大学院経営管理研究科修士課程修了(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で取り上げてほしいネタは?

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

その他の連載

2010年版SEO体得講座

本連載では,いまや企業サイトの戦略の1つとして欠かすことのできないSEOについて,最新トレンドからすぐに使えるTipsまでを紹介します。

小型Linuxサーバの最高峰 OpenBlockS 600活用指南

搭載メモリの増加,CPUクロックの向上など,あらゆる面が強化された期待の新モデルOpenBlockS 600。この記事ではOpenBlockS 600の紹介から,活用するためのさまざまなノウハウを紹介していきます。

はじめMath! Javaでコンピュータ数学

プログラミング言語入門者向けに,知っていると役立つ数学的トピックスを紹介します。簡単な演習問題と解説で,即活用できる知識を目指します。

教科書には載っていない ネットワークエンジニアの実践技術

ネットワークエンジニア,インフラエンジニアのトラブル対応には,時には「教科書通りにいかない」テクニックが必要となります。資格試験では得られないこうした実践的な技術について,実例を元に紹介します。

Googleケータイ,世に現る

2008年9月,Googleが中心となって開発されている「Android」を採用した携帯電話「T-Mobile G1」が発表されました。本連載ではT-Mobile G1を中心にGoogleケータイに迫ります。

モバゲーオープンプラットフォームに挑戦!――面白法人カヤック流モバゲーオープンプラットフォーム企画と開発のイロハ

2010年1月にリリースとなったモバゲーオープンプラットフォーム。その制作企業であるカヤックが,アイデアを企画に落とし込み,開発までのノウハウを紹介します。

プロトタイピングツールSketchFlowを用いた,Silverlightアプリ開発

SketchFlowプロトタイプ作成からアプリケーション開発までをExpression Blend 3を使って実践的に解説します。

Ubuntu Weekly Recipe

Ubuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。

連載一覧

gihyo.jp

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

書籍案内

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

定期刊行物一覧

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

最近のコメント