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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     リスナー関数の定義場所について
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
TJFORD
Åê¹ÆNo.40703
投稿日時: 2008-11-10 18:27
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
リスナー関数の定義場所について
ボタンを押したら画像をロードするといった仕様の場合、ボタンをインスタンス化したところでリスナー登録するのがよいのか、クラスの中に内包しておく(コンストラクタなどでリスナー登録)のがよいのか迷っています。

複数のボタンがあり、それぞれクリックするとLoader(実際はLoaderを拡張したカスタムクラスです)に画像が読み込まれる(全てのボタンが同じLoaderを参照)ような時、各ボタンインスタンスにLoaderの参照を渡して、クラス内でリスナー関数を定義する方法と、インスタンス化した場所、例えばドキュメントクラスでリスナー関数を定義する方法を思いついたのですがどちらがよいでしょうか?

時と場合によるのでしょうか…。

説明が至らないところもあるかもしれませんがよければアドバイスいたけますでしょうか。
どうぞよろしくお願いいたします。
野中文雄
Åê¹ÆNo.40707
投稿日時: 2008-11-10 21:19
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: リスナー関数の定義場所について
「クラス内でリスナー関数を定義する」というクラスは、何をするものなのでしょう?

サッカーで監督がフォーメーションを決定し、選手のポジションを定め、各自の果たす役割を決めるのと同じことです。誰がパスを出し、誰がシュートすればよいかは、それらの帰結として導かれます。

「リスナー関数を定義する」のがそのクラスの役割であれば、そうすべきです。また、ドキュメントクラスに任せると決めたのなら、それでよいでしょう。こうすべきというルールがある訳ではなく、それを考えることは、監督の仕事です。

それらクラスのデザインと機能・役割を明らかにされたうえで、どちらの方が整合性をもつかというご質問でしたら、もう少し具体的にアドバイスできるでしょう。
引用:
TJFORDさんは書きました:
複数のボタンがあり、それぞれクリックするとLoader(実際はLoaderを拡張したカスタムクラスです)に画像が読み込まれる(全てのボタンが同じLoaderを参照)ような時、各ボタンインスタンスにLoaderの参照を渡して、クラス内でリスナー関数を定義する方法と、インスタンス化した場所、例えばドキュメントクラスでリスナー関数を定義する方法を思いついたのですがどちらがよいでしょうか?

なお、ご質問に対して回答が得られたなら、フィードバックをしましょう。→【フィードバックをしない


----------------
 

TJFORD
Åê¹ÆNo.40708
投稿日時: 2008-11-10 22:03
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
Re: リスナー関数の定義場所について
野中さん

ありがとうございます。
たとえば下記のBtnクラスはコンストラクタでリスナー登録。
-----------------------------------------------------------
package {
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLRequest;
public class Btn extends Sprite {
private var imgLoader:Loader;
private var pass:String;
public function Btn(ldr:Loader,str:String) {
imgLoader = ldr;
pass = str;
addEventListener(MouseEvent.CLICK, onClick);
}

private function onClick(e:Event):void {
imgLoader.load(new URLRequest(pass));
}
}
}
-----------------------------------------------------------

一方ドキュメントクラスでリスナー登録
(ここでインスタンス化しているのBtnクラスは上記のものとは違い、loaderをコンストラクタで渡していません。ドキュメントクラスでインスタンス化したloaderを使用)
-----------------------------------------------------------
for(var i=0;i<imgPassList.length;i++){
var myBtn:Btn = new Btn(imgPassList[i]);
myBtn.addEventListener(MouseEvent.CLICK, onClick);
}


private function onClick(e:Event):void {
imgLoader.load(new URLRequest(e.target.pass));
}

-----------------------------------------------------------

といった具合なのですが…(スクリプト省きすぎでしょうか…)
どちらも動くことは動くと思いますが、使いどころの違いが分かっておりません。

どうぞよろしくお願いいたします。
野中文雄
Åê¹ÆNo.40709
投稿日時: 2008-11-10 22:59
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: リスナー関数の定義場所について
回答は、よくお読みになりましたか?→【回答をきちんと読まない・回答者から聞かれたことに答えない
引用:
Fumioは書きました:
「クラス内でリスナー関数を定義する」というクラスは、何をするものなのでしょう

サッカーで監督がフォーメーションを決定し、選手のポジションを定め、各自の果たす役割を決めるのと同じことです。誰がパスを出し、誰がシュートすればよいかは、それらの帰結として導かれます。

「リスナー関数を定義する」のがそのクラスの役割であれば、そうすべきです。また、ドキュメントクラスに任せると決めたのなら、それでよいでしょう。こうすべきというルールがある訳ではなく、それを考えることは、監督の仕事です。

それらクラスのデザインと機能・役割を明らかにされたうえで、どちらの方が整合性をもつかというご質問でしたら、もう少し具体的にアドバイスできるでしょう。
...[中略]...
なお、ご質問に対して回答が得られたなら、フィードバックをしましょう。→【フィードバックをしない


----------------
 

TJFORD
Åê¹ÆNo.40711
投稿日時: 2008-11-10 23:17
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
Re: リスナー関数の定義場所について
野中さん

ありがとうございます。
何度読み返しても理解できませんのでまだまだ私の知識不足のようです。日本語の勉強が先のようです…。

お手数おかけしました。
もう少し考えてみます。
TJFORD
Åê¹ÆNo.40721
投稿日時: 2008-11-11 10:29
半人前
居住地: Tokyo
投稿: 42
使用環境:
:Flash CS3
Re: リスナー関数の定義場所について
度々失礼します。

引用:

「クラス内でリスナー関数を定義する」というクラスは、何をするものなのでしょう
→こちらは前回の投稿しましたBtnクラスのことです。
Btnクラス内でaddEventListener(MouseEvent.CLICK,onClick)とする方が良いのか、インスタンス化した先でaddEventListener(MouseEvent.CLICK,onClick)とする方が良いのかが分かりません。

上記の意味で伝わっていましたでしょうか?
もしかしたら言葉足らずで誤解を招いている可能性もあると思いましたので…。

どうぞよろしくお願いいたします。

野中文雄
Åê¹ÆNo.40722
投稿日時: 2008-11-11 11:21
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: リスナー関数の定義場所について
「何をするものなの」かというのは、「役割」「機能」を尋ねています。ActionScriptのビルトインクラスにSimpleButtonがあるのに、なぜクラスBtnをわざわざ定義するのか、それにより何をさせたいのかということです。

自分の役割を尋ねた選手に、「フォワードです」ではまともに答えたことにならないでしょう。チームのフォーメーションや他のポジションに配置した選手たち、チームの戦い方の中で、どういう「役割」が期待されるのか、監督は明確にする必要があります。

そうした「役割」は、デザインをする人(設計者)が自分の目的をよく考え、自分で決めなければなりません。

Btnクラスのインスタンスは、画像をロードするためだけのボタンなのでしょうか。クリック時に、画像をロードする以外の処理はしなくてよいのですか。それでよいとした場合、Loaderインスタンスはなぜクラス内で生成せず、外からコンストラクタに引数として渡すのですか。また、ロード完了時の処理は、どのクラスが行うのですか。

これらの「機能」や「役割」について、きちんとお考えになり、その説明をされたうえで、ある処理をどこに書くのが「機能」や「役割」と整合性をもつか、というご質問にでしたら、具体的にお答えできるでしょう。

逆に、それらが決まっていない場合には、どこに処理を書いてもさして違いはないでしょうし、クラスになどせずフレームアクションで十分かもしれません。
引用:
TJFORDさんは書きました:
→こちらは前回の投稿しましたBtnクラスのことです。

以前ご質問された「flash lite 1.xで動的にメニューを生成」は、解決したのでしょうか?
引用:
Fumioは書きました:
なお、ご質問に対して回答が得られたなら、フィードバックをしましょう。→【フィードバックをしない


----------------
 

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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