![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
FlashCS3でas3を使っています。
配列についての質問なのですが、
下記のコードがあるとします。
var btn_arr:Array=[aboutA_mc,aboutB_mc,aboutC_mc,aboutD_mc];
配列に格納したボタン全てに、同じマウスアクションをつけたい場合など、
for (var i:int = 0; i<btn_arr.length; i++)
{
btn_arr[i].addEventListener(MouseEvent.Roll_Over,abcdOver);
}
function abcdOver(e:MouseEvent):void
{
btn_arr[i].textColor = #FFFFF;
とかで、出来るかなと思ったのですが、上手くいきません。
何か良い方法があれば、ご教授よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
#1 & #2 です。
> 実際には、
>
> function abcdOver(e:MouseEvent):void
> {
> var c:ColorTransform = new ColorTransform();
> c.color = (0xCCCCCC);
> e.target.transform.colorTransform = c;
> }
>
> にしたかったのですが、これは駄目でした。
駄目とはどういう状態なのでしょうか?
(駄目じゃないとはどういう状態なのでしょうか?)
他のものを除くと
スクリプトは次のようにするということですよね?
--------------------------------
var btn_arr:Array = [aboutA_mc,aboutB_mc,aboutC_mc,aboutD_mc];
for (var i:int = 0; i<btn_arr.length; i++)
{
btn_arr[i].buttonMode = true;
btn_arr[i].addEventListener(MouseEvent.ROLL_OVER,abcdOver);
}
function abcdOver(e:MouseEvent):void
{
var c:ColorTransform = new ColorTransform();
c.color = (0xCCCCCC);
e.target.transform.colorTransform = c;
}
--------------------------------
もっとも
c.color = (0xCCCCCC);
ではなく
c.color = 0xCCCCCC;
だとは思いますが
この場合は ( ) があっても意味は変わりませんからこのままでも良いです。
うまく行っていると思いますが【添付図】↓
と言いますか,【添付図】の場合は
ただ単に
var c:ColorTransform = new ColorTransform();
c.color = (0xCCCCCC);
aboutB_mc.transform.colorTransform = c;
と書いたときと変わらないということです。
(for文 や 配列 などを使おうが使わまいが同じ結果になる。)=(問題ない。)
![「AS3の配列の中にアクセス」の回答画像3](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/8/1373636_5497ee0314924/M.jpg)
ありがとうございます。
上手くいきました!昨日は何か勘違いしてたのかもしれないです。。。
ここ最近、色々回答していただきありがとうございます!
本当に助かってます。
サイトは8割ほど完成しました。
残るはフォトギャラリーのみです。
No.2
- 回答日時:
#1です。
#1の件(スクリプトの意味がわからないの件)とは全く別に
btn_arr[i].textColor = #FFFFF;
これが何らかの形で仮に動作したとします。
これは ボタンMC クリック時に発生するイベントですよね。
ボタンMC クリック時には i という数値は 4 になって止まっているんです。
ココにも書きましたが。
http://oshiete.goo.ne.jp/qa/6607531.html
> for (var i:int = 0; i<3; i++)
>
> のようにループされることになります。
> つまり
> i=0 状態で 1回目ループ
> i=1 状態で 2回目ループ
> i=2 状態で 3回目ループ
> i=3 状態になると 3 未満という条件が成立しないので
> ループせずに for文 を抜けます。
今回の場合は
> for (var i:int = 0; i<3; i++)
↓
「 for (var i:int = 0; i<4; i++)」
ですから
「 i=4 状態になると 4 未満という条件が成立しないので
ループせずに for文 を抜けます。」
と書き替えることになりますが。
ですからどのボタンMCをクリックしても
btn_arr[4].textColor = #FFFFF;
が起こるわけです。
それが起こらないようにするために
リスナー関数の引数 「e:MouseEvent」 を使ったり
場合によっては クロージャ を使ったり,MC内に固有の変数を作ってそこに固有の i の値を保存する というようなことをする必要が出てくるのです。
ご指摘ありがとうございます。
転職するため、今月末には後任者にデータを引継ぎするので、コードは分かり易くまとまっているほうが良かったのです。
今のサイトは前任者から引き継いだもので、HTMLでCSSも使わずに作られたもので、訳が分からなかったので、自分で作ったほうが引き継ぎやすいと思いまして。。。
そもそも、本業は3dcgで、flashは初めてなので、かなりきついです。
とりあえずは、
for (var i:int = 0; i<btn_arr.length; i++)
{
btn_arr[i].n = i;
btn_arr[i].buttonMode=true;
btn_arr[i].addEventListener(MouseEvent.CLICK,abcdClick);
btn_arr[i].addEventListener(MouseEvent.ROLL_OVER,abcdOver);
btn_arr[i].addEventListener(MouseEvent.ROLL_OUT,abcdOut);
}
function abcdClick(e:MouseEvent):void
{
this.gotoAndPlay(lbl_arr[e.currentTarget.n]);
for (var i:int = 0; i<btn_arr.length; i++)
{
btn_arr[i].addEventListener(MouseEvent.CLICK,abcdClick);
}
e.currentTarget.removeEventListener(MouseEvent.CLICK,abcdClick);
}
function abcdOver(e:MouseEvent):void
{
e.target.alpha = 0.8;
}
function abcdOut(e:MouseEvent):void
{
e.target.alpha = 1;
}
のように書けば、上手くいきました。
実際には、
function abcdOver(e:MouseEvent):void
{
var c:ColorTransform = new ColorTransform();
c.color = (0xCCCCCC);
e.target.transform.colorTransform = c;
}
にしたかったのですが、これは駄目でした。
e.target.alpha = 1;
や、
e.target.visible=false;
はOKなのに、colorTransformは駄目なのには、何か条件があるのでしょうか。。。
引数やクロージャはまだ理解できていないので、もうちょっと頑張ってみます。
No.1
- 回答日時:
人間が見ても意味がわかりません。
PCならなおさらです。
for文 とか 配列 とか言う前にそれナシでやってみるべきでしょう?
というかそれナシができてから質問すべきでしょう?
for文 とか 配列 とか ナシ状態↓
aboutA_mc.textColor = #FFFFF;
何コレ? です。
スクリプトは別にまとまらなくても良いじゃないですか。
そんなことにこだわっているから何にもできないのではないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Excel(エクセル) excel vbaの配列なんですが・・・ 1 2022/12/26 18:50
- JavaScript 配列の1要素を代入した変数を使って元の配列要素を削除できるか 1 2023/07/28 03:34
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- HTML・CSS CSS のみのタブ切り替えについて 1 2023/01/11 16:47
- C言語・C++・C# int temp = 0; if(isdigit(arr[i])){//文字が数字であれば(0~9) 1 2022/03/27 01:37
- C言語・C++・C# c言語 int temp = 0; if(isdigit(arr[i])){ temp=arr[i] 2 2022/03/27 01:44
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画像表示をアルファでフェード...
-
○秒間実行 AS3
-
アセンブリ言語のcasl2について...
-
photoshopで書いた四角の枠の中...
-
python ボタンを押すと複数の関...
-
VBAからPDFのテキストフィールド
-
RPG(AS400)の本、サイトってあ...
-
【VB.NET】別Formのボタンが押...
-
static関数がmapファイルに載ら...
-
VBAで改行の入ったデータの正規...
-
accessの検索について質問です...
-
360度パノラマ写真をループでき...
-
AS3.0 でフェードイン、
-
フォームのテキストの入力数字...
-
【Photoshop】レイヤー効果の境...
-
場面が移り変わるときかっこよ...
-
外部テキストファイルより座標...
-
Flashでレーダーチャート
-
多言語を混在できるか。
-
ウインドウハンドルとインスタ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
画像表示をアルファでフェード...
-
ムービークリップ変換について...
-
ActionScript スクロールメニュー
-
何で重なり合おうとするんでし...
-
ステージにある複数のインスタ...
-
for文を使ったボタン
-
配列に入れたムービークリップ...
-
○秒間実行 AS3
-
Actionscript3.0 子のイベント...
-
Actionscript3.0のクラス定義の...
-
FLASH 定型のASを登録しといて...
-
addChildの使い方
-
外部テキスト読み込みでマーキ...
-
AS3の配列の中にアクセス
-
関数を停止するには。。。。
-
as3 addEventListenerの動的な...
-
actionscript3.0 オブジェクト...
-
actionscript3.0 データ型について
-
複数mcのランダム再生とmc指定...
-
photoshopで書いた四角の枠の中...
おすすめ情報