長文失礼します。
2DのRPG風に移動するだけのFlashを作っています。
_root上には
・主人公MC[me」
・マップ用MC「map」
の順番で配置しています。
移動する仕組みとしては、主人公は中央に居て、背景が移動する事で移動しているように見せる方法です。
マップ用MCは30×30の二次元配列(マス)で構成されています。
それぞれのマスには数値が入っており、チップMC「chip」の再生フレームを指定しています。
これにより、チップの再生フレームを変えて、草や道、崖などを表現します。
そして、メインタイムラインに二重のfor文でそれぞれを配置していきます。
このとき、attachMovieを用いてライブラリにあるチップMC「chip」をマップMC「map」内に配置したいのですが、画面は真っ白なままで、主人公だけが表示されている状態です。
リンゲージウィンドウの識別子も「chip」になっていて、深度も重複しないようにしています。
出来れば、この現象の原因と思われる部分を教えて頂きたく、質問をさせていただきました。
文章から原因を突き止めるのは困難なので、attachMovieを扱う際に注意すべき点をアドバイスして頂いても助かります。
アドバイスおよび回答、よろしくお願いします。
(補足も分かる範囲でさせて頂きます。)
No.3ベストアンサー
- 回答日時:
>マップMCはmの初期値0から1ずつ減算した深度にし、
>当たり判定MCはnの初期値0から1ずつ加算した深度にしてある為、
>マップMCが前に出ると言うのは無いはずです・・・。
深度はMCごとにもっているので
_root.map.attachMovieで指定する深度と
_root.wall.attachMovieで指定する深度は関係ありません
問題は親MCである_root.mapと_root.wallの深度です。
ですので、#1の補足に書かれた
>//この前の行で空MCを製作しました。
の部分で例えば、
_root.createEmptyMovieClip("map", 2);
_root.createEmptyMovieClip("wall", 1);
のように書いていると、_root.mapが手前に来て_root.wallが後ろに隠れてしまいます。
私が思いつく原因はこのくらいです。一応検証用に使ったASを載せておきます
「chip」と「alpha」のリンケージ識別子が設定してあれば、
メインタイムラインにコピペすれば動きます。
//-----------------------------------
//↓「map」MCと名前がかぶってしまうのでちょっと変えました
var mapA = new Array();
//
var d = 0;
for (var x = 0; x<30; x++) {
mapA[x] = new Array();
for (var y = 0; y<30; y++) {
d++;
mapA[x][y] = d;
}
}
_root.createEmptyMovieClip("map", 1);
_root.createEmptyMovieClip("wall", 2);
//
n = 0;
m = 0;
for (a=0; a<mapA.length; a++) {
for (b=0; b<mapA[0].length; b++) {
n++;
//マップ用MCにチップを配置してゆく
create = _root.map.attachMovie("chip", "chip"+a+"_"+b, n);
create.gotoAndStop(mapA[a][b]);
create._x = create._width*b;
create._y = create._height*a;
//もし、マスの数値が50以上なら、当たり判定MCにチップを
//(50フレーム以上には通行不能のチップを置いています)
if (mapA[a][b]>50) {
m++;
create2 = _root.wall.attachMovie("alpha", "alpha"+a+"_"+b, m);
create2._x = create._width*b;
create2._y = create._height*a;
}
}
}
//-----------------------------------
あと、これは今回の件に関係ありませんが深度をマイナスにすると
removeMovieClipできなくなります。
丁寧な回答ありがとうございます。
原因はperseさんのおっしゃるとおり、当たり判定MC自体の深度指定を誤り、マップMCの背後に隠れていた為でした。(数値が小さいほど前、と思い込んでいたのかも・・・。)
また、門のような「最初は通行不能、ある事をすると通行可能」のようなものを作る為には、当たり判定MCの一部を消すため、removeMovieClipは必要かもしれません。
深度設定についても考え直してみます。
本当にありがとうございました。
No.2
- 回答日時:
>create2 = _root.wall.attachMovie("alpha","alpha"+a+"_"+b,m);
>create2._x = create._width * b;
>create._y = create._height * a;
の一番下は
create2._y = create._height * a;
ではないでしょうか?(createではなくcreate2)
これが間違っているのに
>traceで確認したところ、名前もきちんと表示され、座標も正しい数値を示してきました。
ということは、違うMCをtraceしていた。なんてことないですか?
または
「alpha」MCの_alpha値が0になっているとか、
「wall」MCが「map」MCとかの背面にあってみえてないとか。
この回答への補足
これは、プログラムを直接コピーした訳ではなく、打ち直したものなので、こちらだけの打ち間違えです。
その為、traceはきちんと作動しているようです。
当たり判定MCはalpha値によるものではなく、半透明に塗りつぶしたものを使っています。本番ではこれを透明にして使おうと思います。
マップMCはmの初期値0から1ずつ減算した深度にし、当たり判定MCはnの初期値0から1ずつ加算した深度にしてある為、マップMCが前に出ると言うのは無いはずです・・・。(最初に加算、減算しているため、深度0が重複していると言う事もありません)
回答ありがとうございます。
質問をする前に一通り、状態を確認してみましたが、traceのミス、代入先のミスなどは見られませんでした。
うむう・・・何故でしょうか・・・。
No.1
- 回答日時:
attachMovieしたMCをtraceで確認してみてはどうでしょうか。
AS2だとこんな感じです
//attachMovie開始位置
var xStart = 0;
var yStart = 0;
//chipの高さと幅
var h = 10;
var w = 10;
//横方向と縦方向の配置数
var xCount = 30;
var yCount = 30;
//深度
var dsp = 0;
for (var y = 0; y<yCount; y++) {
for (var x = 0; x<xCount; x++) {
dsp++;
//attachMovie
var mc = _root.attachMovie("chip", "chip"+dsp, dsp);
//位置
mc._x = xStart+x*w;
mc._y = yStart+y*h;
trace(mc)
}
}
この回答への補足
早速、traceでチェックしてみました。
質問を単純にしようと思い省いていたのですが、実は、チップ用MCと同時に、当たり判定用MC「wall」も複製しているのです。
当たり判定MCは、分かりやすいように半透明の赤色をつけてあります。
タイムライン上には
//この前の行で空MCを製作しました。
n=0;
m=0;
for(a=0;a<map.length;a++){
for(b=0;b<map[0].length;b++){
n--;
//マップ用MCにチップを配置してゆく
create = _root.map.attachMovie("chip","chip"+a+"_"+b,n);
create.gotoAndStop(map[a][b]);
create._x = create._width * b;
create._y = create._height * a;
//もし、マスの数値が50以上なら、当たり判定MCにチップを
//(50フレーム以上には通行不能のチップを置いています)
if(map[a][b] > 50){
m++;
create2 = _root.wall.attachMovie("alpha","alpha"+a+"_"+b,m);
create2._x = create._width * b;
create._y = create._height * a;
}
}
}
これを実行したところ、マップ用MCは正しく表示されたものの、当たり判定用MCが表示されませんでした。
traceで確認したところ、名前もきちんと表示され、座標も正しい数値を示してきました。
原因は、attachMovie自体の仕様か、深度の指定の間違いかな、と思っているのですが、打開策が分からずに居ます・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 宇宙科学・天文学・天気 AIが答えた方程式 1 2023/02/20 00:12
- Windows 8 動画の再生とタイトルの変更方法を教えてください。 3 2022/08/01 14:51
- スピーカー・コンポ・ステレオ MCカートリッジのオススメを教えてください。 お時間割いてくださりありがとうございます。 当方、現在 10 2022/07/04 14:20
- 哲学 日本語の文法を考える 3 2022/06/23 10:05
- Visual Basic(VBA) エクセルマクロでアニメを作る方法を教えてください。 1 2023/02/07 14:27
- 物理学 『四次元温度』 2 2022/05/09 11:07
- その他(メンタルヘルス) 他人を模倣する癖?について。 1 2022/04/15 19:40
- 物理学 時間を語るなら、(複数の時間の正体)を知る必要が有る。 1 2023/02/16 22:14
- 小学校 至急、小6、運動会スタッフの立候補しました。意気込みを書いた文章に何かアドバイス頂けたら…! 4 2022/09/07 22:36
- 物理学 E=MC二乗 C=299792458m C二乗= 299792458X299792458= 8987 9 2022/08/10 09:33
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ドラッグで、mcの大きさを等倍...
-
ムービークリップがマウスカー...
-
YOASOBI
-
縦のメニューバー作成方法で困...
-
Pythonのtkinterについて
-
画像表示をアルファでフェード...
-
プログラミング、アーキテクチ...
-
C# chart controlの透過について
-
XMLでJPEGスライドを作成_表示...
-
背景画像が拡大縮小しつつ、大...
-
複数mcのランダム再生とmc指定...
-
テキストフィールドについてのA...
-
Adobe Flash Player 9 のテキ...
-
全てのテキストボックスをセル...
-
画像切り替えのアクションスク...
-
ラッコって?
-
VBAでホームページからコピーし...
-
100点でクリアする簡単なモグラ...
-
ランダムに4桁の数字を表示する...
-
App store のマークってイルミ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
AS2をAS3にしたい
-
360度パノラマ写真をループでき...
-
attachMovieについて(長文)
-
photoshopで書いた四角の枠の中...
-
VBAで改行の入ったデータの正規...
-
YOASOBI
-
VBScriptでMsgBoxのYesNoボック...
-
プログラミング、アーキテクチ...
-
python ボタンを押すと複数の関...
-
別のアプリケーションのテキス...
-
テキストボックスの中身をリセ...
-
テキストボックスにセルの値を...
-
五芒星は、悪魔崇拝とどういう...
-
else if文の順序を変えることに...
-
RPG(AS400)の本、サイトってあ...
-
変数に256文字以上のテキストを...
-
PYTHONのtkinterについて
-
Pythonのtkinterについて
-
ダブルクリックと2回クリックの...
-
VB6.0で、フォームから、別のフ...
おすすめ情報