こちらでご指導仰ぎながらアクションスクリプトの簡素化を進めています。いい感じのところまできていますが最終局面で行き詰っています。
myMovieClipというムービークリップと3つのボタンmy_btn1、my_btn2、my_btn3を配置しそれぞれのボタンをクリックしたらムービークリップの色が変わるという物を作っています。エラーは出ないのですが全てのボタンで同じ色(指定していない)に変化します。なにがおかしいのでしょうか?
本来なら
colorTransDic[my_btn1] = new ColorTransform(1,1,1,1,122,15,122,0);
とするところを簡素化したく配列に色データを詰め込み
colorTransDic[this["my_btn" + i]] = new ColorTransform(colors[i - 1]);
としましたがこれが間違っているようです。
お手数ですがご指導宜しくお願いいたします。
スクリプトは以下の通りです。
import flash.geom.ColorTransform;
import flash.geom.Transform;
var trans:Transform = new Transform(myMovieClip);
var colorTransDic:Dictionary = new Dictionary();
var colors:Array = [[1,1,1,1,255,255,255,0],[1,1,1,1,122,122,122,0],[1,1,1,1,0,0,0,0]];
for (var i:int = 1; i<=3; i++)
{
colorTransDic[this["my_btn" + i]] = new ColorTransform(colors[i - 1]);
this["my_btn" + i].addEventListener( MouseEvent.CLICK , onClick );
}
function onClick( event:MouseEvent )
{
trans.colorTransform = colorTransDic[event.currentTarget];
}
No.1ベストアンサー
- 回答日時:
おそらく
new ColorTransform( ) の ( )内に入れる引数を
勝手に配列だと決めていらっしゃるところが間違いなんだと思います。
colorTransDic[this["my_btn" + i]] = new ColorTransform(colors[i - 1]);
これだと
「new ColorTransform( ) の
第1引数に colors[i - 1] 全部を入れて
第2引数~第8引数には何も入れない。」
ということになってしまいます。
↓↓↓
new ColorTransform(colors[i - 1], , , , , , , )
つまり
new ColorTransform( ) の
「第1引数には想定外の変なものを入れて,
第2引数~第8引数引数はデフォルトのまま。」
ということになりますから,
実際に次のような値が入ります。
↓↓↓
new ColorTransform(NaN, 1, 1, 1, 0, 0, 0, 0)
動作的には次のように動きます。
↓↓↓
new ColorTransform(0, 1, 1, 1, 0, 0, 0, 0)
したがってどのボタンをクリックしても
myMovieClip は
new ColorTransform(0, 1, 1, 1, 0, 0, 0, 0)
の色(赤が飛んだ色)にしかならないのです。
というわけで対処法です。
◎ 対処法1
ご質問のスクリプトの次の部分を
colorTransDic[this["my_btn" + i]] = new ColorTransform(colors[i - 1]);
次のように変えるのも1つの方法だと思います。
colorTransDic[this["my_btn" + i]] = new ColorTransform(colors[i - 1][0],colors[i - 1][1],colors[i - 1][2],colors[i - 1][3],colors[i - 1][4],colors[i - 1][5],colors[i - 1][6],colors[i - 1][7]);
(↑改行無しの長い1行です。)
◎ 対処法2
ご質問のスクリプトの次の部分を
//-------------------------
var colors:Array = [[1,1,1,1,255,255,255,0],[1,1,1,1,122,122,122,0],[1,1,1,1,0,0,0,0]];
for (var i:int = 1; i<=3; i++)
{
colorTransDic[this["my_btn" + i]] = new ColorTransform(colors[i - 1]);
this["my_btn" + i].addEventListener ( MouseEvent.CLICK , onClick );
}
//-------------------------
次のように変えるのも1つの方法でしょう。
//-------------------------
var colors:Array = [new ColorTransform(1,1,1,1,255,255,255,0),new ColorTransform(1,1,1,1,122,122,122,0), new ColorTransform(1,1,1,1,0,0,0,0)];
for (var i:int = 1; i<=3; i++)
{
colorTransDic[this["my_btn" + i]] = colors[i - 1];
this["my_btn" + i].addEventListener ( MouseEvent.CLICK , onClick );
}
//-------------------------
◎ 対処法3
またはご質問のスクリプト全体を
次のように変えるのも1つの方法でしょう。
//-------------------------
import flash.geom.ColorTransform;
import flash.geom.Transform;
var trans:Transform = new Transform(myMovieClip);
var colorDic:Dictionary = new Dictionary();
var colors:Array = [[1,1,1,1,255,255,255,0],[1,1,1,1,122,122,122,0],[1,1,1,1,0,0,0,0]];
//ColorTransformのプロパティ名を配列に登録
var colorProp:Array = ["redMultiplier","greenMultiplier","blueMultiplier","alphaMultiplier","redOffset","greenOffset","blueOffset","alphaOffset"];
for (var i:int = 1; i<=3; i++)
{
colorDic[this["my_btn" + i]] = colors[i - 1];
this["my_btn" + i].addEventListener ( MouseEvent.CLICK , onClick );
}
function onClick ( event:MouseEvent )
{
var colorTrans:ColorTransform = new ColorTransform();
for (var i:int = 0; i < colorProp.length; i++)
{
colorTrans[colorProp[i]] = colorDic[event.currentTarget][i];
}
trans.colorTransform = colorTrans;
}
//-------------------------
ActionScript ではありませんが
関連している内容の質問だと思われるURLです。
「JavaScriptでインスタンスを生成するときに、引数を配列の内容にするにはどうした... - Yahoo!知恵袋」
http://detail.chiebukuro.yahoo.co.jp/qa/question …
早々のご指導感謝します。完璧なご指摘でどこが間違っていたか完全に理解出来ました。また丁寧に複数の対処法まで考えていただき本当に嬉しかったです。対処法2で進めることとさせていただきました。これから作業を進めていきますがまた行き詰った時は宜しくお願いします。この度はありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- 英語 高校英語の問題 1 2023/05/23 15:29
- 英語 【英語】 新しい職場の人と仲良くできるか心配です。 ①I'm worried I won't get 4 2022/06/26 21:19
- 英語 「this is the/my first time~」の文法上の制約について 1 2023/04/06 09:48
- JavaScript gasについて 1 2022/05/31 21:51
- JavaScript 画像の表示位置 3 2022/12/23 08:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フラッシュゲームアーカイブ2
-
VBAのコンボボックスの年月表示...
-
おもしろフラッシュのサイト名...
-
この曲はなんでしょう?
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
Flashコンテンツを使ったWebサイト
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
-
ad or script について
-
uwscでExcelに自動記入
-
パソコンのリカバリーについて
-
iPhoneです。 Adobeフラッシュ...
-
ロック画面に天気を表示したい
-
サイト構築の方法を教えてください
-
URLの/以降だけを入力したいです。
-
Adobe(マクロメディア)のFLAS...
-
adobe flash playerは無料です...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スマホでサイトの画像を長押し→...
-
フラッシュゲームアーカイブ2
-
uwscでExcelに自動記入
-
potplayerについて質問です
-
arduino プログラムについて
-
私のコンピューター上のファイ...
-
アメブロで音声ファイルを貼る方法
-
VBAのコンボボックスの年月表示...
-
この曲はなんでしょう?
-
Windows10重い
-
iPhoneです。 Adobeフラッシュ...
-
ad or script について
-
パソコンのリカバリーについて
-
chrome flash
-
Flashコンテンツを使ったWebサイト
-
Form内のselectを連動させるに...
-
FLASH MX で作成した、flashやA...
-
キャラクター設定について
-
Flashplayerの運用について
-
laptop go2からの買い替え、lap...
おすすめ情報