忍者ブログ
洋書や映画で出会った英語特有の美しい表現から、プログラミング、日々の雑記まで幅広く。
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

***本題に入る前に、おまけ***
PCの中をあさってたら、ずいぶん昔に遊びで作っていたRPGの戦闘部分が出てきました↑
暇な方がいたら少し遊んでみてね。ライオン結構手ごわいけど。
(方向キーとスペースキーのみ使います)






今日はタイトルの通り、少し技術系のお話です。(と言っても全く難しい話ではありません!)

先日今まで遭遇した事のなかったバグに相当悩まされました。
そのバグの現象を少し詳しく説明すると、
「前フレームのインスタンス名を指定せず、次フレームで共通のインスタンスを用いた場合、そのインスタンスが認識されない事がある」というものです。

文字だけでは分かりづらいので、図を用いながら説明します。
例えば、次のような玉が横に流れるだけのflashを例にしましょう。



スクリプトは、ルートフレームに次のように記述しました。
var mc_array=new Array();

for (var i = 0; i<20; i++) {
    mc_array[i] = eval("MC_"+i);
    mc_array[i].vx = 2;
}

_root.onEnterFrame = function() {
    for (var i = 0; i<20; i++) {
        mc_array[i]._x += mc_array[i].vx;
        if (mc_array[i]._x>Stage.width || mc_array[i]._x<0) {
            mc_array[i].vx = mc_array[i].vx*-1;
        }
    }
};
尚、玉には手動でインスタンス名(MC_0 ~ MC_15)を割り当てています。
プログラムをかじった事のある方なら説明は不要かと思いますが、一応ポイントだけ説明を。
for文の中の
mc_array[i] = eval("MC_"+i);
の部分で、インスタンスを配列に格納し、配列から各インスタンスにアクセスできるようにしています。
onEnterFrameはフレームが変わらない限り繰り返される部分にあたりますが、ここに玉のx座標を操作して左右に動かしています。

この段階では問題なく全ての玉が動いています。

ここで、このフレームの前に次のようなフレームを作ってみます。
062b211a.JPG

このように、インスタンス名を割り当てていない青玉(共通のインスタンス)を前の1フレーム目に1つ配置してみました。すると、、


このように、さっきまで正常に動いていた全く関係のない2フレーム目の一つの玉がストライキを起こして動かなくなります。

36a878e4.JPG

名無しの玉共が3つに増えれば、



3人でスクラムを組んでサボり始めます。

尚、このとき配列番号の低いインスタンスからサボり始める(=認識されなくなる)ようです。
解決策としては、
皆に平等に名前を与えてやってください。
m(_ _)m

特にアニメーションをさせていない1フレーム目のインスタンスに名前をつけてやるのを忘れずに!

あと、どうしても手動で配置せざるを得ない場合を除き、リンケージを設定してattachMovieメソッドで動的に生成させた方がいいかと思いました。これなら名前を規則的に生成できるのでつけ忘れがないからです。

それにしてもアニメーションをさせる必要もないのに名前をつけないといけないとはなんと面倒な!
この仕様はなんとかしてほしいなぁ~。

拍手[1回]

PR
この記事にコメントする
name
title
color
mail
URL
comment
pass   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
secret (チェックを入れると管理人だけに表示できます)
この記事へのトラックバック
この記事にトラックバックする:
カレンダー
03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
フリーエリア
最新コメント
最新トラックバック
プロフィール
HN:
mak
性別:
非公開
趣味:
英語、読書、インテリア
バーコード
ブログ内検索
P R
カウンター
アクセス解析
ATOM  
ATOM 
RSS  
RSS 
Copyright ©   Before The Day Breaks...   All Rights Reserved
Design by MMIT / TemplateB2  Powered by NINJA TOOLS
忍者ブログ [PR]