0

わかりましたので、以前にこれを行うことができましたが、その方法を思い出せなかったり、当時見つけたソースを見つけたりすることができません。簡単なフラッシュゲームを作っています。複数のキャラクターが動きます。各レベルを他のレベルより難しくするために、各キャラクターの移動速度をレベルごとに変更することにしました。フレーム 1 のメイン タイムラインでこれらの変数に値を宣言して割り当てると、思いどおりに動作しません。別のフレームにあるレベル 2 に行くと、速度は当然のように上がります。しかし、移動速度が速いレベル 1 である次のレベルに移動すると、値の割り当てが再度処理されます。つまり、移動速度は最初の状態に戻ります。

//frame 1
var speed:int = 5;
//level accomplished, speed++, goto frame 2

//frame 2
//level accomplished, speed++, goto frame 1

そして、フレーム 1 のすべてのコードが再び実行され、「速度」の値が 5 に戻されます。

変数をクラスに入れてみましたが、問題は同じで、フレーム 1 に戻るたびにコード「var speed:Speed = new Speed();」が表示されます。再び実行すると、変数の値は speed.as ファイルで割り当てた値に戻ります。

新しいオブジェクトを作成せずに常にグローバルにアクセスできるように、パッケージ内ではなくクラス外でグローバル変数を作成するために、非常に多くの異なる組み合わせを試しました。

これが私の現在のコードです:

//speed.as
package
{
public var speed:int = 5;
}

//game.fla
import speed;

trace(speed);

これにより、「未定義の可能性のあるプロパティ速度へのアクセス...」というエラーがスローされます。

私が言ったように、私はさまざまな組み合わせを試してみましたが、さまざまなエラーが発生し、8〜9時間グーグルで掘り下げていましたが、それは私を夢中にさせています. 皆さんは私の最後の希望です。グローバル変数の使い方を簡単に教えてくれる答えに非常に感謝しています(グローバル変数が悪いことは知っていますが、理由はよくわかりませんが、多くの人がそれを書いているのを見ました) 、別の簡単でより良い解決策がある場合は教えてください。ただし、他の解決策と互換性を持たせるためにコード全体または何かを書き直したくありません。グローバル変数がこの問題を解決することはわかっていますが、それらの使用方法がわかりません。

.as ファイルと .fla ファイルの両方で何をすべきかについての指示が必要です。前もって感謝します!

4

3 に答える 3

0

わかりましたので、別のパッケージのグローバル変数ではなく、タイムライン全体からアクセスできる変数を見つけました。

コードだけで追加のフレームを作成しただけです。このフレームに、変数 + frameCounter 変数を入れます。私の最初のフレームで、私はこのコードを入れました:

if (frameCount == 0)
{
gotoAndStop(7);
}

したがって、変数を宣言するコードは 1 回だけ実行されます。おそらく最善の解決策ではありませんが、少なくとも意図したとおりに機能します =)

于 2013-05-21T20:15:52.680 に答える