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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     _mc.onRelease();はAS3では?
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
kirarin
Åê¹ÆNo.39049
投稿日時: 2008-5-30 11:16
職人
居住地: 彩の国
投稿: 214
使用環境:
Windows7
IE 8
Flash CS4
Flash Player WIN 10,0,45,2
-------------------------
WindowsXP Professional SP3
IE7.0
Flash 8 Professional
Flash Player 10.0.12.36
-------------------------
Windows2003 Sp1
IE6.0 SP1
Flash MX 2004 ...
_mc.onRelease();はAS3では?
いつもお世話になっております。
kirarinです。

AS3になってonRelease→addEventListenerになりましたが、これに関して質問です。

hoge_mc.onRelease = function(){
trace("Click!");
}
hoge_mc.onRelease();
上記の記述で、hoge_mcのクリック動作を1回実行できました。

これと同じことをAS3で行いたい場合、
hoge_mc.addEventListener(MouseEvent.CLICK, xHandler);
function xHandler(evt:MouseEvent):void {
trace("Click!");
}
のあと、hoge_mc.onRelease();に代わる記述はどのようになりますでしょうか。
そのままxHandler();として関数を呼び出すと、引数の数が正しくないということでコンパイルエラーとなりました。(当然ですね)

このような場合は、
function xHogeClick(){
trace("Click!");
}
のような関数を別で定義して、xHandlerの中ではxHogeClickを呼ぶ、という感じに入れ子(?)にする必要がありますでしょうか。

検索したのですが、思うような記事にたどりつけませんでした。
情報いただけますと幸いです。
よろしくお願いいたします。


----------------
Kirarin

とんび
Åê¹ÆNo.39050
投稿日時: 2008-5-30 11:39
Bak@Fla大巨匠
居住地: 佐賀県 杵島郡
投稿: 275
使用環境:
MX
CS3
:Flash CS6:CS6
.7.5
Re: _mc.onRelease();はAS3では?
 ダミーのイベントを送ってやればいいと思います.

xHandler( new MouseEvent( MouseEvent.CLICK ) );


 受け取ったイベントを使って、色々やっているのでしたら、それに必要なイベントに仕立てたやつを送ってやるといいかと.
 特にevtを使ってないなら、これでOK


----------------
鳶嶋工房

野中文雄
Åê¹ÆNo.39051
投稿日時: 2008-5-30 11:44
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: _mc.onRelease();はAS3では?
xHandler(null);

です。
引用:
kirarinさんは書きました:
function xHandler(evt:MouseEvent):void {
	trace("Click!");
}

のあと、hoge_mc.onRelease();に代わる記述はどのようになりますでしょうか。
そのままxHandler();として関数を呼び出すと、引数の数が正しくないということでコンパイルエラーとなりました。(当然ですね)

あるいは、関数の側にデフォルト値を設定しておく方法もあります。
function xHandler(evt:MouseEvent=null):void {
	trace("Click!");
}
xHandler();


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

kirarin
Åê¹ÆNo.39064
投稿日時: 2008-5-30 18:15
職人
居住地: 彩の国
投稿: 214
使用環境:
Windows7
IE 8
Flash CS4
Flash Player WIN 10,0,45,2
-------------------------
WindowsXP Professional SP3
IE7.0
Flash 8 Professional
Flash Player 10.0.12.36
-------------------------
Windows2003 Sp1
IE6.0 SP1
Flash MX 2004 ...
Re: _mc.onRelease();はAS3では?
とんびさん、野中さん、ご回答ありがとうございました。
どちらの記述でもスクリプトでボタン押下時と同じ動作を実行することができました。
関数の側にデフォルト値を定義しておく方法は、初めて知りました。

試しにxHandlerの中で
trace(evt.currentTarget);
を表示してみました。

xHandler( new MouseEvent( MouseEvent.CLICK ) );
とした場合は、nullが出力され、
xHandler(null);
とした場合は、「null のオブジェクト参照のプロパティまたはメソッドにアクセスすることはできません」という実行時エラーとなりました。

受け取ったevtを使う必要があるかないかで注意したほうがよいようですね。
今回は特に必要ないのでxHandler(null)で対応しようと思います。


>受け取ったイベントを使って、色々やっているのでしたら、それに必要なイベントに仕立てたやつを送ってやるといいかと.

上記についてもう少しお伺いしてもよいでしょうか。
例えば、今回のxHandlerの中身が、押下されたボタン自体の横幅を倍にする・・・などのような処理をしたい場合、
function xHandler(evt:MouseEvent):void {
trace("Click!");
evt.currentTarget.width *= 2;
}
のように定義されると思います。

このボタンをスクリプトで押下したい場合も、xHandlerに渡すイベント定義の部分をどうにか「仕立て」れば、可能なのでしょうか。
もしこのスレッドの内容からは少し外れる、ということであれば、参考となる資料、URLなどの情報でも教えていただけると助かります。

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


----------------
Kirarin

とんび
Åê¹ÆNo.39068
投稿日時: 2008-5-31 1:14
Bak@Fla大巨匠
居住地: 佐賀県 杵島郡
投稿: 275
使用環境:
MX
CS3
:Flash CS6:CS6
.7.5
Re: _mc.onRelease();はAS3では?
 MouseEventのコンストラクタで、プロパティを設定できるようになっていますので、ここで必要なプロパティをガツンと設定してやると、上手い具合に「仕立てる」ことができます。

http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/events/MouseEvent.html

 targetは残念ながらread onlyの書き込み不可のプロパティなので、仕立てることはできません。

 しかし、nullを送るというのはまったく気づかなかったなぁ。勉強になりました。


----------------
鳶嶋工房

kirarin
Åê¹ÆNo.39072
投稿日時: 2008-5-31 10:14
職人
居住地: 彩の国
投稿: 214
使用環境:
Windows7
IE 8
Flash CS4
Flash Player WIN 10,0,45,2
-------------------------
WindowsXP Professional SP3
IE7.0
Flash 8 Professional
Flash Player 10.0.12.36
-------------------------
Windows2003 Sp1
IE6.0 SP1
Flash MX 2004 ...
Re: _mc.onRelease();はAS3では?
ご回答ありがとうございます。

targetやcurrentTargetがセットできたらよかったなぁと思いますが、read only以外なら可、ということですね。

どのような場合に使うかは今のところ思いつきませんが、今後の参考とさせていただきたいと思います。

ありがとうございました!


----------------
Kirarin

とんび
Åê¹ÆNo.39103
投稿日時: 2008-6-6 2:21
Bak@Fla大巨匠
居住地: 佐賀県 杵島郡
投稿: 275
使用環境:
MX
CS3
:Flash CS6:CS6
.7.5
Re: _mc.onRelease();はAS3では?
よく考えたら、イベントを本当に発生させればいいのでした。

hoge_mc.addEventListener(MouseEvent.CLICK, xHandler);

function xHandler(evt:MouseEvent):void {
trace("Click!");
}

hoge_mc.dispatchEvent( new MouseEvent( MouseEvent.CLICK ) );


 ちゃんと、targetも拾えます。


----------------
鳶嶋工房

kirarin
Åê¹ÆNo.39104
投稿日時: 2008-6-6 7:36
職人
居住地: 彩の国
投稿: 214
使用環境:
Windows7
IE 8
Flash CS4
Flash Player WIN 10,0,45,2
-------------------------
WindowsXP Professional SP3
IE7.0
Flash 8 Professional
Flash Player 10.0.12.36
-------------------------
Windows2003 Sp1
IE6.0 SP1
Flash MX 2004 ...
Re: _mc.onRelease();はAS3では?
とんびさん、再度ありがとうございます!
できました!

as2の時も似たようなことをしていましたが、実際にボタンを押下したときと、スクリプトで関数を実行した時では、関数内部のthisの参照が異なっていたため、ちょっと下策と思いつつ処理の分岐をしていましたが、これならtargetもばっちり一致しますね。

dispatchEventという名前は何となく目に映ってはいたのですが、実際にどのように使うかがピンと来ていなかったのですが、とてもすっきりしました。
ありがとうございました!
--------------------

[6/6追記]
サーバー移転で6月移行の投稿が反映されなかったようですね。
6/1にとんびさんが投稿していくれた記事も拝見しました。ありがとうございました。
私の返信も、一応再投稿しておきます。


----------------
Kirarin

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

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