Flash/AS2勉強会/その2.ActionScriptの書き方 http://www.ark-web.jp/sandbox/wiki/293.html

[edit]

目次

[edit]

Flash AS2 勉強会

[edit]

動画


Online Videos by Veoh.com

[edit]

概要

今回は、ActionScript2 の書き方です。

…が、基本的な文法は既に理解されている前提で、
どのようにコードを記述すると分かりやすいかについて書きます。

[edit]

構築方針

Flash側は、なるべく各タイムラインにおけるステージのインスタンス配置(準備)のみに注力し、
なるべくActionScriptコードを書かない方針にするべきです。

また、ActionScriptの記述方法も、ダラダラと関数を書いていくと
分かりづらいので MVC で実装した方がよいです。

[edit]

やっぱりMVCでやった方がいい

MVCはモデル/ビュー/コントローラーです。

今回のASでは下記のように適用することにします。

[edit]

サンプルで見てみる

実際にサンプルコードを見ながらポイントを説明していきます

[edit]

[Flash側]initフレーム

stop();

// コントローラーの生成
_global.oController = new Controller(this);
[edit]

[コントローラー]コンストラクタ

/**
 * EcoActionをロードして表示するサンプルのコントローラ.
 */

// ecotter/直下のクラス定義ファイルを読み込む
import ecotter.*;

class Controller {
	private var _mtl:MovieClip;	// メインタイムライン


	/**
	 * コンストラクタ.
	 */
	public function Controller(mtl:MovieClip) {
		this._mtl = mtl;
		
		this._mtl.gotoAndStop('load');
	}
(略)
[edit]

[Flash側]loadフレーム

stop();

// ローディング処理
_global.oController.loading();
[edit]

[コントローラー]ローディング処理

	/**
	 * ローディング処理.
	 */
	public function loading() {
		// EcoActionを読み込むクラスを生成
		var oData_mc:MovieClip = this._mtl.null_mc;
		var oLoadEcoAction:LoadEcoAction = new LoadEcoAction(oData_mc);
		
		// 読み込んだ後のハンドラを指定して、ロード開始
		var oController:Controller = this;
		var oLoadedFunc:Object = {
			SUCCESS : function(oData_mc:MovieClip){oController.loadSuccess(oData_mc);},
			ERROR   : function(){oController.loadFaild();}
			};
		oLoadEcoAction.load(oLoadedFunc);
	}
	/**
	 * ロードに失敗したとき.
	 */
	public function loadFaild() {
		this._mtl.gotoAndStop('faild');
	}
	/**
	 * ロードに成功したとき.
	 */
	public function loadSuccess() {
		this._mtl.gotoAndStop('list');
	}
[edit]

[モデル]EcoActionをロードする

/**
 * EcoActionをロードするモデルクラス.
 */
class ecotter.LoadEcoAction {
	private var _oData_mc:MovieClip;	// データ保存用MC
	private var _paramIntervalID;
	private var _oLoadedFunc:Object;


	/**
	 * コンストラクタ.
	 */
	public function LoadEcoAction(oData_mc:MovieClip) {
		this._oData_mc = oData_mc;
		this._paramIntervalID = null;
	}
	
	/**
	 * EcoActionのロード開始.
	 */
	public function load(oLoadedFunc:Object) {
		var sURL:String = 'eco_ranking.txt';
		
		// ロード後のハンドラを保存しとく
		this._oLoadedFunc = oLoadedFunc;
		
		// Data_mcを初期化して、Data_mcにデータローディング
		this._oData_mc.res = '';
		loadVariables(sURL, this._oData_mc);
		
		// 0.1秒のインターバルをセットして、ロードできたかチェック
		var oLoadEcoAction = this;
		this._paramIntervalID = setInterval(function(){oLoadEcoAction.checkLoaded();}, 100);
	}
	/**
	 * ロードできたら、ハンドラを実行する.
	 */
	public function checkLoaded() {
		if (this._oData_mc.res == '') return;
		
		// インターバルをクリア
		clearInterval(this._paramIntervalID);
		this._paramIntervalID = null;
		
		// ハンドラを実行
		var oLoadedFunc:Function = this._makeLoadedFunc(this._oData_mc.res);
		oLoadedFunc();
	}
	/**
	 * ロード結果に対応するハンドラを返す.
	 */
	private function _makeLoadedFunc(sKey:String):Function {
		switch (sKey) {
		case 'SUCCESS':
			return this._oLoadedFunc['SUCCESS'];
		case 'ERROR':
			return this._oLoadedFunc['ERROR'];
		}
		return null;
	}
}
[edit]

[Flash側]失敗時

[edit]

[Flash側]listフレーム

stop();

// 一覧表示処理
_global.oController.listing();
[edit]

[コントローラー]ロードした内容の表示

	/**
	 * 一覧表示する.
	 */
	public function listing() {
		var oContent_txt:TextField = this._mtl.content_txt;
		var oData_mc:MovieClip = this._mtl.null_mc;
		
		var oListItem:ListItem = new ListItem(oContent_txt, oData_mc);
		oListItem.view();
	}
[edit]

[ビュー]アイテムの表示

/**
 * 一覧表示するビュークラス.
 */

class ListItem {
	private var _oContent_txt:TextField;
	private var _oData_mc:MovieClip;


	/**
	 * コンストラクタ.
	 */
	public function ListItem(oContent_txt:TextField, oData_mc:MovieClip) {
		this._oContent_txt = oContent_txt;
		this._oData_mc = oData_mc;
	}
	
	/**
	 * 一覧表示する.
	 */
	public function view() {
		this._oContent_txt.htmlText = '';
		
		var iLength = this._oData_mc.length;
		for (var i:Number = 0 ; i < iLength  ; i++) {
			var aContent = {title:'',id:'',name:''};
			aContent['title'] = eval('this._oData_mc.title'+(i));
			aContent['id']    = eval('this._oData_mc.id'   +(i));
			aContent['date']  = eval('this._oData_mc.date' +(i));
			aContent['name']  = eval('this._oData_mc.name' +(i));
			
			this._oContent_txt.htmlText +=
					'<font color="#0000ff">'+aContent['name']+'</font>'+':'+aContent['title']+
					' on '+aContent['date']+"\n";
		}
	}
}
[edit]

まとめ

Flash側はコントローラーの生成と、コントローラーのメソッドへのアクセスしかしていません。

このようにFlash側とシステム側の関係を最小限にして、システム側の記述方法もMVCで各機能が
分かり易いようにすると保守性/可読性があがって制作がスムーズになると思います。

[edit]

今回作成したアプリ ダウンロード


添付ファイル: fileflashlite2.0_ecotter_sample.zip 797件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-01-23 (水) 17:10:43 (4258d)

アークウェブのサービスやソリューションはこちら