2010年02月18日

気づいたこと

多分、3月にも一回日帰りで東京へ行きます、こんばんは。
さて、今日はActionScript3.0をやっていて気になったことでも。

以下のようなコードを書いたときの挙動が思ったようにいかなかったので備忘録も兼ねて。




for(var i:int = 0; i<10;i++){
   var tf:TextField = new TextField();
   tf.text = "マウスが乗ったらここに数が入力される";
   tf.addEventListener(MouseEvent.ROLL_OVER,function(e:Event):void{
      tf.text=i;
   });
   tf.x = 10;
   tf.y = i * 20;
   addChild(tf);
}




実行したら縦に10個のテキストフィールドが並ぶわけですけれども。
で、マウスが乗ったらテキスト部分には数字が入るはずですが・・・・

して欲しい挙動は「上から1番目:1、上から2番目:2、上から3番目:3...」 といった挙動なのですが、全てのテキストフィールドにてROLL_OVERで11が代入されれてしまいます。
「そーなのかー」と引き下がっても仕方ありません。
原因は全てのテキストフィールドが「マウスが乗ったときにi(ループを抜け出した時点の値は11)を代入する」という挙動を取っていたからでした(今考えると恥ずかしいミスですが^^;

現在、こんな感じで対処しています。
もっと効率的な方法があったら(実行速度とか管理のしやすさの観点から)教えていただきたいです。



var obj_cont:Object = new Object();


for(var i:int = 0; i<10; i++){
   var tf:TextField = new TextField();
   tf.text = "マウスが乗ったらここに数が入力される";
   tf.x = 10;
   tf.y = i * 20;
   addChild(obj_cont[i] = tf);
}

addEventListner(Event.enterFrame, function(e:Event):void{
   for(var i:int = 0; i<10; i++){
      if(obj_cont[i].hitTestPoint(mouseX, mouseY, true)) obj_cont[i].text = i;
   }
}




web拍手を1つ確認しております。
上記の事柄を解決できたのはこのweb拍手のおかげです、きっと。
いえ、心の糧にはなってるんですよ、本当に;
感謝感謝ー。


holypanel at 23:21│Comments(2)TrackBack(0) ActionScript3.0 

トラックバックURL

この記事へのコメント

1. Posted by うると   2010年02月19日 01:38
いつっすか?
14日あたりだと多分スゲー嬉しいが
2. Posted by ホーリーパネル   2010年02月19日 08:47
3/12ですよー。
日帰りだけどねっ
会社関係の事なので平日です。

コメントする

名前
 
  絵文字
 
 
QRコード
QRコード