ページ1
ページ2 ページ3 ページ4 |
ActionScriptどこに書く?
- MXスタイルからAS2.0まで - |
講師:野中 文雄氏
ActionScriptのセミナーでお馴染みの野中文雄氏。
小気味良い語り口調で、この日もActionScriptを大解剖。 |
初心者にはちょっと高度な内容でしたが、いくつかあるActionScriptの記述場所とその用途を丁寧に解説してくださいました。以下野中さんの原稿を元にまとめました。
セミナー原稿およびサンプルデータ:
http://www.fumiononaka.com/Sample/F-site/FF040515.html
|
ActionScriptどこに書く? |
ActionScriptを書ける場所は以上の3箇所。書く場所とFlashのバージョンにより使えるActionScriptの内容が違います。フレームに記述するActionScriptはシンボルで共有され、ムービークリップやボタンに記述するActionScriptはインスタンスごとに設定できます。
Flashのバージョンが上がるにつれ、今までムービークリップに書いていたイベント対応のActionScriptをイベントハンドラメソッドとしてフレームアクションに書けるようになりました。 |
外部ファイル |
フレーム |
ムービークリップ |
ボタン |
Flash 5 |
・#include |
フレームで実行すべき処理 |
イベント対応のAS
onClipEvent() |
イベント対応のAS
on() |
Flash MX(コンポーネント方式) |
・#include |
・フレームで実行すべき処理
・イベントハンドラメソッド |
イベント対応のAS
onClipEvent()
on() |
イベント対応のAS
on() |
Flash MX 2004(クラス定義スタイル) |
・#include
・ActionScript 2.0 クラス定義 |
・フレームで実行すべき処理
・イベントハンドラメソッド |
イベント対応のAS
onClipEvent()
on() |
イベント対応のAS
on() |
|
|
Flash MXスタイル(コンポーネント方式) |
「Flash MXからイベントハンドラメソッドが実装された。これにより、イベントハンドラの処理を、フレームアクションとして記述することが可能になった。基本的なスクリプトは処理の対象となるタイムライン(MovieClip)の(第1)フレームアクションにまとめ、インスタンスごとに処理の異なるスクリプトをButtonやMovieClipアクションに設定する」
(野中さんの原稿より )
ムービークリップアクションに記述されている以下のActionScriptは、
//MovieClip : 移動するインスタンスのスクリプト
//MovieClipアクション
onClipEvent(load){
var nDeceleration = 0.2;
var nTargetX = _x;
}
onClipEvent(enterFrame){
_x += (nTartgetX - _x)*nDeceleration;
}
//MovieClip : ボタン
//MovieClipアクション
on(release){
_parent.my_mc.nTarget+=10;
} |
イベントハンドラメソッドとしてMovieClip内のタイムライン第1フレームに記述できます。
var nDeceleration = 0.2;
var nTargetX = _x;
onEnterFrame = function(){
_x +=(nTargetX-_x)*nDeceleration
}
野中さん曰く、ムービーを作りながらActionScriptを書く人はこのスタイルをとることが多いようです。 |
Macromedia推奨スタイル |
「基本的に、メインタイムラインの第1フレームに記述(外部ファイルで#include)。インスタンスには、できるかぎりスクリプトを書かない。スクリプトとデザインを分離する。チームプロジェクトに適している」
(野中さんの原稿より )
//_root : メインのタイムライン
//第1フレームアクション
//movieClip : _root.my_mc
my_mc.nDeceleration
=0.2;
my_mc.nTargetX = my_mc._x;
my_mc.onEnterFrame
= function(){
this._x += (this.mTargetX-this._x)*this.nDeceleration;
};
//MovieClip : _root.button_mc
button_mc.onRelease
= function(){
this._parent.my_mc.nTargetX
+= 10;
};
コンポーネント方式と違うところはターゲットパスの指定の仕方。
_rootの第1フレームに書くのでbutton_mcから見たmy_mcはthis._parent.my_mcと指定するそうです。複雑ですね。
|
MXスタイル(コンポーネント方式)とMacromedia推奨スタイルとの違い |
|
コンポーネント方式 |
Macromedia推奨スタイル |
長所 |
・スクリプトと(ビジュアル)素材がパーツとして一体化される。
・プログラマが作成したものを、デザイナーがアレンジ・修正できる。
・コンポーネント化を意識して作成すれば、ライブラリ化も可能。 |
・基本的に、メインタイムラインの第1フレームアクションで、すべての処理が把握できる。
・スクリプトをデザインと分離できる。プログラマは、ムービーを見る必要がない。
・外部.asファイルを#includeすればよく、スクリプトが流用しやすい。 |
短所 |
・スクリプトの記述場所が、分散化する。
・プログラマとデザイナーの役割分担を、予めよく相談しておく必要がある。
・大規模の開発には、対応しにくい。 |
・スクリプトとデザインの整合性に注意しなければならない。基本的に仕様書が必要。
・スクリプトの一字一句の変更も、必ずプログラマが対応することになる。
・大規模の開発向きで、小回りは利きにくい。 |
|
|
functionの利用 |
「Flash MX以降は、イベントハンドラメソッドを始め、functionの活用が重要。イベントハンドラメソッドは、ダイナミックに設定・クリアできる」
(野中さんの原稿より)
「イベントハンドラメソッドの使い方は、キーボードのファンクションキーの設定に似ています。ファンクションキーには、始めは機能の与えられていないものがあります。そうしたキーには、ユーザーがあとで自由に処理を割り当てられるわけです」
(野中 文雄著「モーショングラフィックスで学ぶActionScript」P.110より抜粋)
■寄り道:functionって?
functionは関数とも呼ばれ、処理の手順(英語でmethod)をメモリしたものです。関数をイベントハンドラメソッドに定義すれば、イベントが発生したときにその処理が実行されます。
関数の定義は、ファンクションキーを割り当てる作業にあたります。ただし、ファンクションキーとは違って名前を自由につけられます。
野中さんの著書にtrace()を使った簡単な例がありましたのでご紹介します。以下の例はどれも同じ結果が得られます。
イベントハンドラアクション/記述場所:MovieClip
on(release) {
trace(this);
}
イベントハンドラメソッド/記述場所:MovieClip内の第1フレーム
//イベントハンドラメソッドへのfunctionの定義
this.onRelease = xTrace;
//イベントハンドラメソッドで呼び出すfunction定義
function xTrace()
{
trace(this);
}
イベントハンドラメソッド/記述場所:MovieClip内の第1フレーム
(*functionに名前をつけないときの記述方法)
//イベントハンドラメソッドへのfunctionの設定
this.onRelease = function () { trace(this); }
※ショートカット:
Escキーを押し続けてO、Cと入力するとonClipEvent、続けてF、Nでfunctionが入力されます。
functionの使い方がわかってきたので、以下セミナーで使われたActionScriptを見てましょう。 |
■コンポーネント方式での書き方
// MovieClip: 移動するインスタンス
// 第1フレームアクション
var nDeceleration = 0.2;
var nTargetX = _x;
function xEaseTo(nX) {
nTargetX = _x+nX;
this.onEnterFrame = xFrameAnimation;
}
function xFrameAnimation() {
var nDistanceX = nTargetX-_x;
if (Math.abs(nDistanceX)>0.5) {
_x += nDistanceX*this.nDeceleration;
} else {
_x = nTargetX;
delete this.onEnterFrame;
}
trace(_x);
}
// MovieClip: ボタン
// MovieClipアクション
on (release) {
_parent.my_mc.xEaseTo(10);
}
■Macromedia推奨方式での書き方
// _root: メインのタイムライン
// 第1フレームアクション
// MovieClip: _root.my_mc
my_mc.nDeceleration = 0.2;
my_mc.nTargetX = my_mc._x;
function xEaseTo(nX) {
my_mc.nTargetX = my_mc._x+nX;
my_mc.onEnterFrame = xFrameAnimation;
}
function xFrameAnimation() {
var nDistanceX = this.nTargetX-this._x;
if (Math.abs(nDistanceX)>0.5) {
this._x += nDistanceX*this.nDeceleration;
} else {
this._x = this.nTargetX;
delete this.onEnterFrame;
}
trace(this._x);
}
// MovieClip: _root.button_mc
button_mc.onRelease = function() {
this._parent.xEaseTo(10);
}; |
ActionScript
2.0 |
「ActionScript 2.0は、クラス定義のスタイルが最大の特徴。classステートメントで明確にクラスを定義し、変数(プロパティ)や関数(メソッド)にデータ型の指定ができる。クラスをシンボルに対して設定することも可能」
(野中さんの原稿より)
ActionScript 1.0の形式はそのまま使うことができます。ActionScript 2.0は、外部ファイルでクラス定義をしてそれを読み込む必要がある人向けのものです。
クラス:
クラスとは、プロパティとメソッドを定義したものです。シンボルと同様にインスタンスを作成して、インスタンスごとにプロパティの設定やメソッドの呼出しが行えます。クラスの定義は、デフォルトではメインタイムラインの第1フレームアクションより前の、インスタンスが生成されないうちに処理されます。そのため、インスタンスから_xなどのプロパティを取得する場合には、コンストラクタというインスタンス生成時に呼出される関数内で処理する必要があります。 |
// ActionScript 2.0クラス定義ファイル: Easing.as
class Easing extends MovieClip {
var nDeceleration:Number = 0.2;
var nTargetX:Number;
function Easing() { // コンストラクタ関数
nTargetX = _x;
}
function xEaseTo(nX:Number):Void {
nTargetX = _x+nX;
this.onEnterFrame = xFrameAnimation;
}
function xFrameAnimation():Void {
var nDistanceX:Number = nTargetX-_x;
if (Math.abs(nDistanceX)>0.5) {
_x += nDistanceX*nDeceleration;
} else {
_x = nTargetX;
delete this.onEnterFrame;
}
trace(_x);
}
}
|
[シンボルプロパティ]の[AS
2.0クラス]に設定 |
ActionScript 2.0を使ったクラス定義について、詳しくは「オブジェクト指向プログラミング」またはオンラインヘルプ「ActionScriptリファレンスガイド」を参照。
|
以上野中さんによる「ActionScriptどこに書く? - MXスタイルからAS2.0まで
-」でした! |
|
|
Top |
|
|
ページ1
ページ2 ページ3 ページ4 |