※実際にやりたいことは違うのですが、
分かりやすくするため簡易的にしています。
ステージに配置された2つのインスタンスを
y=300に移動するというものを作りたいと思っています。
(実際には100以上になるので動的に生成したいです。)
var num:int = 2;
var _mc:Array = [];
var _mcName:Array = [];
for(var i=0; i < num; i++){
_mc.push("test_mc"+i);
_mcName.push("test_mc"+i);
}
for(var n=0; n < num; n++){
_mc[n] = new MovieClip;
_mc[n].addEventListener(Event.ENTER_FRAME, function() {
MovieClip(getChildByName(_mcName[n])).y = 300;
});
}
上記を実行すると下記のエラーが出ます。
TypeError: Error #2007: パラメータ name は null 以外でなければなりません。
at flash.display::DisplayObjectContainer/getChildByName()
at MethodInfo-1()
下記のように並べて記述するとうまくいくのですが・・・・
これを100個以上も書くのはばかばかしいので。。。
_mc[0] = new MovieClip;
_mc[0」.addEventListener(Event.ENTER_FRAME, function() {
MovieClip(getChildByName(_mcName[0])).y = 300;
});
_mc[1] = new MovieClip;
_mc[1」.addEventListener(Event.ENTER_FRAME, function() {
MovieClip(getChildByName(_mcName[1])).y = 300;
});
ご教授お願いいたします!
No.1ベストアンサー
- 回答日時:
元から全体的に無茶な感じがしますが.../(-_-)ヽ。
というか,
「getChildByNameに変数を利用する」意味などあるのだろうか?
という気がします。
まず,
getChildByName(NAME)
に入れるNAMEは "インスタンス名" ですよ。
そもそも「MovieClipインスタンス」とはステージ上に存在するインスタンスです。
(「シンボル と インスタンス」 でいう意味のインスタンスです。)
また「MovieClipのインスタンス名」とはステージ上に存在するときのインスタンスの名前です。
だからまず _mc[n] をステージ上に配置した上で,
そのインスタンスにインスタンス名を付けなければなりません。
それで書き直すと次のようになります。
----------------------------
var num:int = 2;
var _mc:Array = [];
var _mcName:Array = [];
for(var i=0; i < num; i++){
_mc.push("test_mc"+i);
_mcName.push("test_mc"+i);
}
for(var n=0; n < num; n++){
_mc[n] = new MovieClip;
addChild(_mc[n]);
_mc[n].name = _mcName[n];
_mc[n].addEventListener(Event.ENTER_FRAME, setY(n));
}
function setY(myNum:int):Function{
return function():void{
MovieClip(getChildByName(_mcName[myNum])).y = 300;
}
}
----------------------------
しかしどうみても回りくどすぎます。
なんでわざわざインスタンス名を付けてそれを取得せねばならないんですか?
意味がわかりません。
ActionScript 3.0 では,そもそもインスタンス名など使う必要性は 0 に近いんです。
※手動でステージ上に配置するインスタンスの場合
インスタンス名を付けておくと,
オーサリングが自動的にそのインスタンスを参照する
同名の変数を用意してくれます。
ActionScript 3.0 では一般的に
その変数に対して何かを命令します。
したがってActionScript上では結局
インスタンス名自体に特に意味はないということです。
というわけで,
インスタンス名など使わず,これで良いのではないでしょうか↓。
----------------------------
var num:int = 2;
var _mc:Array = [];
for (var i=0; i < num; i++) {
_mc.push ("test_mc"+i);
}
for (var n=0; n < num; n++) {
_mc[n] = new MovieClip;
//addChild (_mc[n]);//←あってもなくても実行上問題ない
_mc[n].addEventListener (Event.ENTER_FRAME, setY(n));
}
function setY(myNum:int):Function{
return function():void{
_mc[myNum].y = 300;
}
}
----------------------------
あと,
Event.ENTER_FRAM で y を 300 にし続ける意味もさっぱりわかりませんが,
これは1つの例(実際はあり得ないけど単なる架空のサンプル例)という意味としてそのままにしています。
「F-site [AS3] MovieClipインスタンスとインスタンス名」
http://f-site.org/articles/2008/04/19014939.html
この回答への補足
すいません。
スレから少しづれてしまったので、
いったん締めます!
また、別スレでご質問させていただきます。
ありがとうございました。
ご回答ありがとうございます。
1個目に記述いただいたの方問題なく動作いたしましたありがとうございます。
ただ、最後に記述いただいた、
var num:int = 2;
var _mc:Array = [];
for (var i=0; i < num; i++) {
_mc.push ("test_mc"+i);
}
for (var n=0; n < num; n++) {
_mc[n] = new MovieClip;
//addChild (_mc[n]);//←あってもなくても実行上問題ない
_mc[n].addEventListener (Event.ENTER_FRAME, setY(n));
}
function setY(myNum:int):Function{
return function():void{
_mc[myNum].y = 300;
}
}
は動きませんでした。
エラーこそないのですが。。。
(そちらでは動いていますでしょうか・・・)
私も初めは、普通に_mc.yという感じでやってたのですが、
うんともすんともいかず、インスタンス名で指定するやり方を
知りそれで試したところうまくいったもので・・・
もしお時間なりましたら、
再度ご確認いただけますと幸いです!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
インスタンスとポインタ
-
CreateDialogについて
-
SharedObjectの使い方(長文です)
-
VBAで改行の入ったデータの正規...
-
photoshopで書いた四角の枠の中...
-
C# chart controlの透過について
-
多言語を混在できるか。
-
C言語でのマウスを移動とマウス...
-
UWSCのBTN関数について。
-
切り抜いた部分が動くアニメー...
-
(AS3)「var mc:MovieClip = new...
-
マウスオーバーで色が薄くなる...
-
PYTHONのtkinterについて
-
外部テキストのタグ
-
C言語でネットワーク範囲のIPア...
-
ACCESS2003 VBAテキスト編集
-
python ボタンを押すと複数の関...
-
VBScriptでMsgBoxのYesNoボック...
-
チェックボックスのテキストを...
-
Flash5:2つのGIF画像でシェイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【VB.NET】別Formのボタンが押...
-
VB6.0で、フォームから、別のフ...
-
インスタンスとポインタ
-
DataTableの件数を取得したい
-
カーソルを手に変更
-
「Me」を「Form1」にするとエラ...
-
CreateDialogについて
-
SharedObjectについて
-
オブジェクトの重なり順の変更
-
プログラミング、アーキテクチ...
-
VB6.0のHideのバグ?
-
先読み画像を後で生成するMCの...
-
ボタンインスタンスの_nameプロ...
-
クラスのプロパティ一覧を列挙...
-
1000個のMCにa1~a1000のイン...
-
BitmapをIDで指定したい
-
ActionScript3.0で画面を揺らす...
-
Python でシャットダウンのコマ...
-
Win32 API ウィンドウ
-
MouseEventについて教えてください
おすすめ情報