
actionscript勉強中の初心者の身ですがどうかご教授下さい。
Photo1~10と名前のつけたMCを順に並べ、そのMCを押すとリムーブします。
そのリムーブしたMCの間を詰め、残ったものに順に1~また名前を振っていきたいと考えています。
例:
Photo1
Photo2
Photo3→リムーブする
Photo4→リムーブする
Photo5
↓
Photo1
Photo2
Photo5
↓
間を詰めて名前を振り直す
Photo1
Photo2
Photo3(元5)
これを配列を使ってやっているのですが、どうしても空の配列が出来てしまって、上手く希望通りになりません。
間を詰めるところまではたどり着いたのですが、それでも空の配列が前に詰められ、後ろに並び替えられたMCが配置されるというどうにも中途半端にしかできないでいます…
上の例でいきますと、
(空の配列)
(空の配列)
Photo1
Photo2
Photo5
という状態です。
この空白の配列を詰めて、Photo1~順に名前を振り直していきたいと思っています。
今後どんな風にスクリプトを書けばいいのか、もしくはもしこの方法では希望の動きが出来ないようであれば、どう変えればいいのかをどうか教えて頂きたいです。
分かりづらいとは思いますが、何卒よろしくお願いいたします。
var clip_addr:MovieClip = _root;
var list:Array = new Array();
//2段にMC"Photo1~10"を順々に並べていく
objA = new Array(2*5);
D = 1;
sy = 40;
for (y=0; y<2; y++) {
sx = 40;
for (x=0; x<5; x++) {
objA[D] = _root.attachMovie("Photo"+D, "Photo"+D, D+100);
objA[D]._x = sx;
objA[D]._y = sy;
D++;
sx += 100;
}
sy += 100;
}
//リストにrefを記録
//MCを押すとリムーブする
for (i=1; i<=10; i++) {
ref = clip_addr["Photo"+i];
list[i] = {clip:ref};
ref.onPress = function() {
this.removeMovieClip();
};
}
//naraというMCを押すと消された番号を詰めて並び変わる(並び変わる場所はテスト段階なので適当に配置)
nara.onPress = function() {
for (i=1; i<=10; i++) {
list.sortOn("clip",Array.NUMERIC);
trace(list[i].clip)
mog = list[i].clip
mog._x = 100*i;
mog._y = 10*i;
}
};
↑最終的に上の処理にリネームの要素を加えていきたいと考えています。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
MC(ムービークリップ)のリネーム(インスタンス名付け直し)は
そのMCの name プロパティを再度定義し直せば良いだけですが
そもそもリネームする必要はあるのでしょうか?
ActionScript 2.0 までは確かに「インスタンス名」は重要なものですが
ActionScript 3.0 では 「インスタンス名」 は重要ではありませんし
動的に生成したインスタンスにはそもそもインスタンス名など自動では付きません。
ではどうやってインスタンスの管理をするのかというと
インスタンスを「参照する変数」で管理します。
「[AS3] MovieClipインスタンスとインスタンス名」
http://f-site.org/articles/2008/04/19014939.html
わざわざインスタンスの管理に配列を使われるのでしたら
(つまり インスタンス名 とは離れたものを用意するのでしたら)
ActionScript 3.0 風な考え方を取り入れて
その配列にMCへの参照を代入し,
ひたすらその MCへの参照 を管理すれば良いのではないでしょうか。
あと配列の要素を間引くのには
splice() メソッドを使うのが簡単で便利です。
↓全文例↓ (コピペ可)
-----------------------------------
//変数clip_addrに_root階層の参照を代入
var clip_addr:MovieClip = _root;
//2段にMC"Photo1~10"を順々に並べていく
var objA:Array = new Array(2*5);
var sx:Number = 40;
var sy:Number = 40;
for (var i = 0; i<=9; i++) {
//識別子 Photo1~10 のMCを呼び出し
//その参照を 配列 objA[0~9] に代入
objA[i] = _root.attachMovie("Photo"+(i+1), "Photo"+(i+1), i+101);
}
//ムービークリップを配置する関数 arrangeMC を定義
function arrangeMC():Void {
//配列 objA の要素数分ループ
for (var i = 0; i<=objA.length-1; i++) {
// x座標を (i を 5 で割った余り)×100+sx にする
objA[i]._x = i%5*100+sx;
// y座標を (i÷5) の小数を切り捨て×100+sy にする
objA[i]._y = Math.floor(i/5)*100+sy;
}
}
//関数 arrangeMC を即実行
arrangeMC();
//各MCプレス時の動作を定義
for (i=0; i<=9; i++) {
objA[i].onPress = function():Void {
//配列 objA の要素数分ループ
for (var i = 0; i<=objA.length-1; i++) {
// もし配列の要素にこのプレスしたMCの参照が入っていれば
if (objA[i] == this) {
//その要素を1つ抜き取る
objA.splice(i, 1);
}
}
//このプレスしたMCを削除
this.removeMovieClip();
//
//関数 arrangeMC を実行
arrangeMC();
};
}
-----------------------------------
別にこの後(MCのプレス時),
//配列 objA の要素数分ループ
for (var i = 0; i<=objA.length-1; i++) {
//リネーム
objA[i].name = "Photo" + i;
}
というようなことをさせても良いとは思いますが
あまり意味があることのようには思えません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
potplayerについて質問です
-
FLASHでゲームを作っていた人は...
-
この曲はなんでしょう?
-
laptop go2からの買い替え、lap...
-
スクリップト
-
私のコンピューター上のファイ...
-
arduino プログラムについて
-
chrome flash
-
FLASHの再生はできないのでしょ...
-
フラッシュゲームアーカイブ2
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
Form内のselectを連動させるに...
-
Flashをブロックしないで
-
ダウンロードしたデジブックはa...
-
ad or script について
-
Flashplayerの運用について
-
VBAのコンボボックスの年月表示...
-
Adobe Flash Player
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変な質問ですみません、n番目の...
-
VB.NET の配列の要素数
-
VBA 配列で重複した単語が格納...
-
配列の要素番号を取得するには?
-
重複しない乱数整数を発生させる。
-
Vba 配列の中の特定文字列の位...
-
Action Script 2.0 配列の比較
-
IDの自動採番について
-
配列の中にもう1度配列を宣言?
-
AS3.0 二次元配列でムービーク...
-
重複しない乱数を作り配列に入...
-
ActionScript3で乱数を取得しな...
-
VBでボタンを押すと画像をラン...
-
文章の改行数を取得する
-
VB6 複数行のテキストをリスト...
-
awkスクリプトの実行が遅い
-
ランダムに6つの数字を選びその...
-
画像をランダムに表示するには
-
arrayの中から一番近くて大きい...
-
ヒープソートの問題について
おすすめ情報