自分ではどうやっても解決できなかったのでどうかご教授ください。
面倒な作りになっているので大変申し訳ないのですが、少ない数だと機能したものの、数を増やしたことで上手く動かなくなってしまいまして…
ご面倒だとは思いますが、どうか教えていただきたいです。
actionscript2.0で、Photo0~23のMCがあり、各MCの中には5フレームを作っています。
Photo0~23をクリックすることでnextFrameで1ずつフレームが進むよう設定していています。
問題はここからなのですが、ボタンを押したら各MCの今現在表示しているフレームごとにリネームをしようと考えています。
例)()内表示されているフレーム数
Photo0(5),Photo1(3),Photo2(3),Photo3(1),Photo4(4),Photo5(2)
↓
Photo0(5),Photo4(4),Photo1(3),Photo2(3),Photo5(2),Photo3(1)
(フレームの表示番号が多い順番に並べ替える(調べる))
↓リネーム
Photo0(元Photo0),Photo1(元P4),Photo2(元P3),Photo3(元P2),Photo4(元P5),Photo5(元3)
現在表示しているフレーム番号をMCの番号順(Photo0~23)順に調べるスクリプトは下記で出来ています。
しかし、いざリネームをさせると20や21までしかリネームできずに困っています。
var clip_addr:MovieClip = _root;
Change_b.onPress= function(){
_global.px = 0;
Clip_Align();
}
function Clip_Align():Void {
var i:Number, j:Number, px:Number;
var ref:MovieClip;
//表示フレームを順に調べる
for (i=5; i>=1; i--) {
//全てのMCをチェック
for (j=0, px=0; j<=23; j++) {
//走査するMCの参照を作成
ref = clip_addr["Photo"+j];
//該当するMCがあった場合、順にリネームする
if (ref._currentframe == i) {
ref._name= "Photo"+_global.px;
//5から1の順に出てくるかを調べる/正常(しかし↓で21しか出ていない場合は21個しか出てこない)
trace(i)
//ちゃんとリネームされているか調べる/ここで毎回20や21などバラバラな数字が…
trace(ref)
//次のためにpxを更新
_global.px++;
}
}
}
}
ここからずっと進めずに立ち往生してしまっている状態で、困っています…
どこをどう直せば希望の動作をしてくれるのか、
もしくは、記述しているスクリプトがそもそもこれでは出来ないようでしたら、どう改変したらいいのか教えていただきたいです。
何卒よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
前回 No.6436822 と同じ並べ替えの仕様で、名前の通し番号だけムービークリップの並び順に変更する、とのことでよろしいでしょうか?
_name プロパティを直接書き換えてしまうと、様々な誤動作の原因になります。
ですから、これは触らずに、配列変数を用意してリネーム後の名前を記録してはいかがでしょう。
No.6436822 でご紹介したスクリプトの初期設定の部分に
(↓ 各行頭に全角のスペースが入っています。コピーする際はご注意ください)
//リネーム後の管理番号を記録する配列変数
//フィールド名
// clip:MCの参照(Photo0~番号順)
// rename_no:リネーム後の番号
//記録位置はインスタンス名の番号の順
var list:Array = new Array();
↑ このスクリプトを追加し、並べ替えを行う Clip_Align 関数を次のように変更してみてください。
字数の都合上、位置を決める処理を省略させていただきました。
//***
//整列とリネームを行う関数
function Clip_Align():Void
{
var px:Number , num:Number;
var i:Number , j:Number;
var ref:MovieClip;
//表示フレームを順に調べ、表示しているMCがあれば横に並べる
for( i = 5 , num = 0 ; i >= 1 ; i-- )
{
//全てのMCをチェック
for( j = 0 , px = 0 ; j <= 23 ; j++ )
{
//操作するMCの参照を作成
ref = clip_addr[ "Photo" + j ];
//該当するMCがあった場合、横に並べていく
if( ref._currentframe == i )
{
/*ここに、位置を決める処理を書く*/
//リストにリネーム後の管理番号を参照と一緒に記録
list[ j ] = { clip : ref , rename_no : num };
//次のためにpxとnumを更新
px++;
num++;
}
}
}
//デバッグ
trace( "-----" );
for( i = 0 ; i < type_max ; i++ )
{
trace( "元:" + list[ i ].clip._name + " リネーム後:" + "Photo" + list[ i ].rename_no );
}
}
//***
プレビューで確認すると、元の名前とリネーム後の名前が出力されます。
配列変数にはリネーム後の番号だけが入っています。名前はこの番号に "Photo" を追加して作成してください。
trace 文で分かりにくい場合は、ムービークリップに名前を出力するテキストフィールドを作り、そちらにそれぞれの名前を出力すると確認すると分かりやすくなります。
ActionScript の配列変数では、同じ要素の中に仕切り(フィールドといいます)を作って複数の情報を管理することができます。
今回は clip と rename_no という2つの仕切りを作り、clip にムービークリップの参照を、rename_no にリネーム後の番号を記録しています。
リネーム後の番号を持っているムービークリップを判別できるので、何かありましたら利用してみてください。
ムービークリップの並び順に通し番号を振り直すカラクリは、num という変数で取るカウントです。
この変数をまず、外側 i のループの最初で 0 に初期化しておきます。
内側 j のループで、並べるムービークリップが見つかるたびにこの値を記録し、次のために更新します。
上の段に並べるものから探しますから、つまり、先に見つかったものから順に番号が割り当てられます。
j は元のインスタンス名の番号を表します。
従って、配列変数の j 番目に記録すると、元のインスタンス名の並び順で参照とリネーム後の番号を一緒に管理することができます。
なお、
list.sortOn( "rename_no" , Array.NUMERIC );
で、リネーム後の順番に注目して並べ替えることもできます。
何かに使えそうでしたら利用してみてください。
お礼が遅くなってしまったのですが、ご教授誠にありがとうございます…!
まさにこれが私のやりたいことでしたので、嬉しすぎて涙が出そうです…!!
最後に並べ替えのアドバイスまで頂き、本当に勉強になりました。ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Android(アンドロイド) 【google One】グーグルワンの無料の15GBの容量が不足しています。スマホ内 7 2023/02/05 06:30
- Google Drive Google Photo 5 2022/03/23 09:39
- YouTube youtubeは画面と操作パネルが別々に表示されていたのに画面上にかぶるように表示されるようになった 1 2022/05/08 10:04
- 画像編集・動画編集・音楽編集 pixel7proで撮った動画をPCで再生すると色が悪い 2 2023/02/28 18:32
- ノートパソコン WIN11 プライマリディスプレイのアダプタがNVIDIA 3D Visionをサポートしていない。 2 2022/10/20 00:00
- Photoshop(フォトショップ) 写真に日付を入れるのがそんなに大変か 9 2023/07/22 14:38
- Google+ Google Photoの手ぶれ補正機能はどうやったら使えますか?iPhoneです。 2 2023/05/25 01:10
- iPhone(アイフォーン) 『おもいでばこ』で保存したiPhoneのLive Photo、動画はiPhoneで再生出来ますか? 1 2022/10/31 23:26
- その他(恋愛相談) なぜ、女子プロレスラー門倉凜は怖そうに見えるのか? 3 2022/05/02 00:58
- その他(IT・Webサービス) https://apboc.net/photo/generator.php このサイトでどこまで個人 1 2022/10/14 17:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ゲオでカードを作るのは何歳か...
-
フラッシュゲームアーカイブ2
-
レジリエンス 変換キーが作動し...
-
この曲はなんでしょう?
-
arduino プログラムについて
-
FLASHの再生はできないのでしょ...
-
ウェブサイトで Flash が事実上...
-
Flashコンテンツを使ったWebサイト
-
Flash Playerのサポートが終了
-
VBAのコンボボックスの年月表示...
-
Adobe Flash Player
-
Windows10重い
-
uwscでExcelに自動記入
-
パソコンのリカバリーについて
-
iPhoneです。 Adobeフラッシュ...
-
Adobe(マクロメディア)のFLAS...
-
ヘッダーデザインをするさい形...
-
更新されて起きた問題
-
googlechromeでadobeflashplayer
-
Flash playerを有効にするには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
WEBブラウザの重複起動の禁止
-
Flashでのゲーム用アナログ時計...
-
ムービーの早送りと巻き戻しが...
-
ボタンで移動する前に、特定のM...
-
Error#1009 時計のシーン移動ボ...
-
Flash Professional CS5
-
ループ再生のflashをタイムライ...
-
画像がランダムに表示されるFLA...
-
ActionScriptの基本的な部分で...
-
キーボードを押した時のムービ...
-
【ActionScript】命令文を再実...
-
FLASH lite1.1での質問というか...
-
画像をランダムに表示させたい
-
深い階層でのムービークリップ...
-
Flash lite1.0の計算クイズ
-
プルダウンメニューとフェード...
-
loadMovieで読み込んだswf
-
外部画像を読み込み、ボタンで...
-
Flashで右クリックメニューにつ...
-
フレーム内に移動したい
おすすめ情報