トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     for文での、MovieClip.id=i は、OK、Sprite.id=i は、NGの理由
投稿するにはまず登録を

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
joyko
Åê¹ÆNo.42913
投稿日時: 2009-7-13 10:02
常連
居住地: 埼玉県
投稿: 167
使用環境:
for文での、MovieClip.id=i は、OK、Sprite.id=i は、NGの理由
皆さん、
おはようございます。

環境は、Win XP(SP3)、CS3/AS3です。
【現状】for文内で、i を保管しておく手段として、AS2.0では、MovieClip.id=i; なる方法を、良く使ってました。
AS3.0でもそれが効果あるかを試しましたが、答えは、Yesでした。
そこで、(タイムラインのない、MovieClipとしか
理解してないのですが、)Spriteに対しても、
同じことをしてみたら、答えは、Noでした。
【質問】
・2つは、同じ、DiplayObjectContainerで、
違いは、TimeLineがあるかないかの違いだと理解してますが、
この差が出るのは、何故でしょうか?

以下、MovieClipを使った、テストscriptです。
→mc.idが取得できます。
var max:uint=3;//3つの矩形MCで練習

function makeSquare(target:MovieClip) {//矩形図形描画の関数
	var gr:Graphics=target.graphics;
	gr.lineStyle();
	gr.beginFill(0x000000);
	gr.drawRect(-50,0,100,50);
	gr.endFill();
}

for (var i:uint=1; i<=max; i++) {
	var mc:MovieClip=new MovieClip();
	addChild(mc);
	mc.buttonMode=true;
	mc.name="btn"+i;
	mc.id=i;//このmc.idは、保管される
	mc.x=(stage.stageWidth-mc.width)/2;
	mc.y=10+i*80;
	makeSquare(mc);
	
	mc.addEventListener(MouseEvent.CLICK,onClick);
}

function onClick(e:MouseEvent):void{
	trace(e.target.name+":"+"保存番号は、"+e.target.id+"です");
//予想通り、「btn2:保存番号は、2です」等と表示される
}


これは、Spriteを使った、テストscriptですが、Sprite.idが取得できません。エラーになります。
→SpriteがDynamicでないことを、教えて頂いた後、
配列を使わずに、e.target.nameの数字部分の抽出と
それを数値化して、番号取得の例も記載します。

var max:uint=3;//3つの矩形Spriteで練習

function makeSquare(target:Sprite) {//矩形図形描画の関数
	var gr:Graphics=target.graphics;
	gr.lineStyle();
	gr.beginFill(0x000000);
	gr.drawRect(-50,0,100,50);
	gr.endFill();
}

for (var i:uint=1; i<=max; i++) {
	var sp:Sprite=new Sprite();
	addChild(sp);
	sp.buttonMode=true;
	sp.name="btn"+i;
	//sp.id=i;//このsp.idは、エラーになる→このsp.id=i をコメントアウトすると、正常表示される
	sp.x=(stage.stageWidth-sp.width)/2;
	sp.y=10+i*80;
	makeSquare(sp);
	
	sp.addEventListener(MouseEvent.CLICK,onClick);
}

function onClick(e:MouseEvent):void{
         var spnum:uint=Number(e.target.name.substr(3));//btnの次以降の文字列を抽出し、数値化し、変数 spnumに代入
         trace(e.target.name+":"+"保存番号は、"+spnum+"です");
	//trace(e.target.name+":"+"保存番号は、"+e.target.id+"です");//エラーが出る
	/*「未定義である可能性が高いプロパティに静的型flash.display:Spriteの参照
	を使用してアクセスしてます」と表示されます*/
}


1.MovieClipとSpriteの違いに対する、認識不足があるかと思いますが、その点を教えて頂けると、理解が深まります。

2.正直、AS3.0で登場した、TimeLineのない、Spriteなるものの
使い道が、今一、分かってません。
本によると、「第一フレームで事足りることが、多いので、MovieCLipから派生した、Spriteを新規に提供し、
サイズの増加防止と管理の容易性をprovideする」との事ですが、
既述した事程度でつまずくようでは、
結局、MovieClipを使った方が、何かと、応用が効くような気がしてます。
皆さんは、いかがお考えでしょうか?
フラット表示 前のトピック | 次のトピック

題名 投稿者 日時
 » for文での、MovieClip.id=i は、OK、Sprite.id=i は、NGの理由 joyko 2009-7-13 10:02
     Re: for文での、MovieClip.id=i は、OK、Sprite.id=i は、NGの理由 Fumio 2009-7-13 10:33
       Re: for文での、MovieClip.id=i は、OK、Sprite.id=i は、NGの理由 gaienboy 2009-7-13 10:44
       Re: for文での、MovieClip.id=i は、OK、Sprite.id=i は、NGの理由 joyko 2009-7-13 11:03

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops