myMovieClipというムービークリップのカラーをmy_btn01、my_btn02、my_btn03という3つのボタンで
変化させるシミュレーターを作っています。下に書いたようにすれば動くのですが共通する文言が
多いのですっきりと簡素化したいです。実際はボタンが16個あり、色を変えるパーツも20くらいある
のでファイルサイズも考慮して少しでも簡素化したいです。基礎的な質問で申し訳ないですが何卒
ご指導宜しくお願いいたします。
//以下アクションスクリプト タイムラインにべた書きしています(これもクラス?とかにできればと。)
import flash.geom.ColorTransform;
import flash.geom.Transform;
my_btn01.addEventListener( MouseEvent.CLICK , onClick01 );
function onClick01( event:MouseEvent )
{
var trans:Transform = new Transform(myMovieClip);
var colorTrans:ColorTransform = new ColorTransform(1,1,1,1,0,0,0,0);
colorTrans.redOffset = 250;
colorTrans.greenOffset = 30;
colorTrans.blueOffset = 0;
trans.colorTransform = colorTrans;
}
my_btn02.addEventListener( MouseEvent.CLICK , onClick02 );
function onClick02( event:MouseEvent )
{
var trans:Transform = new Transform(myMovieClip);
var colorTrans:ColorTransform = new ColorTransform(1.15,1.05,0.85,1,0,0,0,0);
colorTrans.redOffset = 244;
colorTrans.greenOffset = 60;
colorTrans.blueOffset = -178;
trans.colorTransform = colorTrans;
}
my_btn03.addEventListener( MouseEvent.CLICK , onClick03 );
function onClick03( event:MouseEvent )
{
var trans:Transform = new Transform(myMovieClip);
var colorTrans:ColorTransform = new ColorTransform(1,2,1,1,0,0,0,0);
colorTrans.redOffset = 0;
colorTrans.greenOffset = 0;
colorTrans.blueOffset = 0;
trans.colorTransform = colorTrans;
}
No.1ベストアンサー
- 回答日時:
考え方や使い勝手などによって簡素化する方向も変わりますから
下に書くことは1つ方法例です。
まずは簡素化と言うよりも
普通の単純な書き方に整理します↓。
//-----------------------------------------
import flash.geom.ColorTransform;
import flash.geom.Transform;
var trans:Transform = new Transform(myMovieClip);
my_btn01.addEventListener ( MouseEvent.CLICK , onClick01 );
function onClick01 ( event:MouseEvent )
{
var colorTrans:ColorTransform = new ColorTransform(1,1,1,1,250,30,0,0);
trans.colorTransform = colorTrans;
}
my_btn02.addEventListener ( MouseEvent.CLICK , onClick02 );
function onClick02 ( event:MouseEvent )
{
var colorTrans:ColorTransform = new ColorTransform(1.15,1.05,0.85,1,244,60,-178,0);
trans.colorTransform = colorTrans;
}
my_btn03.addEventListener ( MouseEvent.CLICK , onClick03 );
function onClick03 ( event:MouseEvent )
{
var colorTrans:ColorTransform = new ColorTransform(1,2,1,1,0,0,0,0);
trans.colorTransform = colorTrans;
}
//-----------------------------------------
さらに Dictionary クラスを使って
各ボタン対応の ColorTransform を適用させる流れにします↓。
//-----------------------------------------
import flash.geom.ColorTransform;
import flash.geom.Transform;
var trans:Transform = new Transform(myMovieClip);
//Dictionaryインスタンス「colorTransDic」を作成
var colorTransDic:Dictionary = new Dictionary();
//「colorTransDic」の各ボタン要素に各ColorTransformを登録
colorTransDic[my_btn01] = new ColorTransform(1,1,1,1,250,30,0,0);
colorTransDic[my_btn02] = new ColorTransform(1.15,1.05,0.85,1,244,60,-178,0);
colorTransDic[my_btn03] = new ColorTransform(1,2,1,1,0,0,0,0);
//「my_btn01」~「my_btn03」クリック時に関数「onClick」を実行
my_btn01.addEventListener ( MouseEvent.CLICK , onClick );
my_btn02.addEventListener ( MouseEvent.CLICK , onClick );
my_btn03.addEventListener ( MouseEvent.CLICK , onClick );
//関数「onClick」の定義
function onClick ( event:MouseEvent )
{
//クリックされたボタン要素に対応するColorTransformを適用
trans.colorTransform = colorTransDic[event.currentTarget];
}
//-----------------------------------------
これが1つの方法例です。
もっとも
//「my_btn01」~「my_btn03」クリック時に関数「onClick」を実行
の部分などは
さらに for文 を使って一気に指定することもできますよね。
「ActionScript 3.0で始めるオブジェクト指向スクリプティング
第32回 Dictionaryクラスを使う」
http://gihyo.jp/dev/serial/01/as3/0032
早々のご指導ありがとうございました。素晴らしいの一言です。すっきりして嬉しい限りです。
またColorTransform(1,1,1,1,250,30,0,0);とまとめれるのですね、自分でスクリプトを
長くしていました・・・お恥ずかしい。
上級者の方とお見受けしてもう二つ質問させて下さい。
//「my_btn01」~「my_btn03」クリック時に関数「onClick」を実行部分などはさらに for文 を使って一気に指定することもできますよね。とのことですがどの様にされますか?
以下の様にしても当然の如くエラーが出まして。
for (var i=0; i<16; i++){
"my_btn0"+ (i+1).addEventListener(MouseEvent.CLICK,onClick);
}
あとカラー設定をメインタイムラインに記述して各ボタンから共通で使うとかは可能でしょうか?
こんな感じで登録して呼び出すみたいなのが出来れば最高です。
var color1 = new flash.geom.ColorTransform(1,1,1,1,100,100,100,0);
var color2 = new flash.geom.ColorTransform(1,1,1,1,200,200,200,0);
var color3 = new flash.geom.ColorTransform(1,1,1,1,250,250,250,0);
宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- JavaScript 画像の表示位置 3 2022/12/23 08:25
- JavaScript gasについて 1 2022/05/31 21:51
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのコンボボックスの年月表示...
-
Giam
-
AS3.0 二次元配列でムービーク...
-
uwscでExcelに自動記入
-
potplayerについて質問です
-
拡張子「swf」の再生方法について
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
for文で配置した物の個別取得【...
-
(AS3)ムービークリップからメイ...
-
どのボタンがクリックされたの...
-
アクションスクリプトを簡素化...
-
関数の定義の仕方
-
AS3.0でフェードインできない
-
引数が変わってしまいます。
-
お願いします
-
actionscript3.0 データ型について
-
AS3でプリローダー
-
関数をストップさせるには。。。。
-
FlashPlayer6から8の仕様の変更...
-
FLASHCS3のActionScript3.0で外...
-
マウスクリックで値を送る(AS3...
-
actionScript3.0にてTouchEvent...
-
インスタンスをまとめて生成?
-
エラー(型が一致しません。)...
-
VB6でユーザー定義型がNothing...
-
LRESULTとHRESULT
-
VBでボタンを押すと画像をラン...
おすすめ情報