トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     クラスの使い方
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
htakumu
Åê¹ÆNo.43856
投稿日時: 2009-11-7 8:38
半人前
居住地:
投稿: 38
使用環境:
Windows 7 HomePremium
AdobeFlashCS4
GoogleChrome,IE8
クラスの使い方
as3はちょっとやりましたが、クラスについてはまだまだ分からない者です。


回答お願いします

例えば、

main.fla・・・ _txtというテキストフィールドを配置

MyClass.as

があるとして、

MyClass.asは、_txtに現在の時間を表示します。

main.flaでは、ボタンが二つあり、一つ目を押すと、MyClassの動作(現在時刻の表示)して、

二つ目を押すと、main.flaに書いたコードで”あああ” と表示するプログラムがあるとして、

MyClassは、エンターフレームで現在の時間を更新しているので、

あああと表示しようとしても、すぐ現在時刻になってしまうのは当たり前です。

そこで、その二つを切り替える方法として、

あああ も エンターフレームで表示させなければいけないのでしょうか?

それとも、MyClassの動作を一時的に無効にするということは出来るのでしょうか。


MyClass.as main.fla は必ず使うとすると、どんな感じで出来るのですか?

日本語が下手で
すいません
永井勝則
Åê¹ÆNo.43858
投稿日時: 2009-11-7 13:08
職人
居住地: 白馬村
投稿: 796
使用環境:
Windows 7 :Flash CS4:
10.6.8 :Flash CS5.5
Re: クラスの使い方
結果からいうと、メインのタイムラインで、
addEventListener()とremoveEventListener()を使い分ける方法が分かりやすいと思います。

以下、少々長くなります。

メインのタイムライン(またはドキュメントクラス)を指令を出す司令塔、司令塔に使われる側をカスタムクラス(ASファイル)と考えます。
カスタムクラスとしてはこの場合、
・時間を返すクラス(NowTimeクラス)
・"あああ"を返すクラス(SayAAAクラス)
が考えられます。
メインのタイムラインからは、必要に応じてこれらのクラスに指令を出します。

たとえばカスタムクラスは次のようになります。
// 今の時間を返す機能を持つクラス
package {
	
	public class NowTime {
		
		// private属性を持つ変数
		private var nowTime;
		
		// コンストラクタ
		public function NowTime() {
			trace("NowTimeインスタンス作成");
		}
		
		// 今の時間をDateインスタンスで返すpublicのメソッド
		public function getNowTime():Date {
			nowTime = new Date();
			return nowTime;
		}
	}
}


// "あああ"というストリングを返すクラス
package {
	
	public class SayAAA {
		
		// ストリング"あああ"を値に持つprivateの変数
		private var myVoice:String = "あああ";
		
		// コンストラクタ
		public function SayAAA() {
			trace("SayAAAインスタンス作成");
		}
		
		// 変数myVoiceを返すpublicのメソッド
		public function sayA():String {
			return myVoice;
		}
	}
}


これらのクラスの機能を利用するメインのタイムラインは次のようになります。

// myTxt_txt、sayA_btn、getTime_btnがあるメインのタイムライン

// 2つのカスタムクラスのインスタンスを作成
var nowTimeObject:NowTime = new NowTime();
var sayAAAObject:SayAAA = new SayAAA();

// 2つのボタンにイベントリスナーを設定
getTime_btn.addEventListener(MouseEvent.CLICK, onGetTime)
sayA_btn.addEventListener(MouseEvent.CLICK, onSayA)

// getTime_btnのクリックで呼び出されるリスナー関数
// 毎フレーム、onGetNowTime()を呼び出す
function onGetTime(evet:MouseEvent):void {
	// removeEventListener(Event.ENTER_FRAME, onGetNowTime);
	addEventListener(Event.ENTER_FRAME, onGetNowTime);
}

// 毎フレーム呼び出されるリスナー関数
// nowTimeObjectのgetNowTime()を呼び出し、その結果をテキストフィールドに表示
function onGetNowTime(evt:Event):void {
	var now:Date = nowTimeObject.getNowTime()
	myTxt_txt.text = String(now)
}

// sayA_btnのクリックで呼び出されるリスナー関数
// sayAAAObject.sayA()を呼び出し、その結果をテキストフィールドに表示
function onSayA(evet:MouseEvent):void {
	removeEventListener(Event.ENTER_FRAME, onGetNowTime);
	
	var resultText:String = sayAAAObject.sayA();
	myTxt_txt.text = resultText;
}


ポイントは適切なタイミングでaddEventListener()とremoveEventListener()を使って、イベントを処理していることです。

もちろんこれは単なる一例でほかにもやり方はあります。
考え方としては、欲しい機能を持ったカスタムクラスを作成し、その機能を必要なときに使用し、不要なときには使わなくする切り替えをメインのタイムラインで行う、ということです。

ただし上記のコードでは不要なenterFrameイベントが発生しています。


----------------
永井勝則:
himco.jp :

htakumu
Åê¹ÆNo.43860
投稿日時: 2009-11-7 13:27
半人前
居住地:
投稿: 38
使用環境:
Windows 7 HomePremium
AdobeFlashCS4
GoogleChrome,IE8
Re: クラスの使い方
ひゃ?^^ありがとうございます。

本当に助かりました。

理想どうりの動作です^^

わざわざコードまで書いていただいてどうもありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops