アプリ版:「スタンプのみでお礼する」機能のリリースについて

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;
}

A 回答 (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
    • good
    • 0
この回答へのお礼

早々のご指導ありがとうございました。素晴らしいの一言です。すっきりして嬉しい限りです。
また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);

宜しくお願いいたします。

お礼日時:2013/03/23 17:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!