0

現在、2 つのオブジェクトを持つフラッシュ ファイルの紹介画面があります。以下を使用して外部フラッシュ ファイルをロードするボタン:

var myLoader:Loader = new Loader();                    
var url:URLRequest = new URLRequest("flashgame.swf");

2 つ目は、1 から 10 までの数値ステッパーです。ユーザーが 3 などの数字を選択した場合、flashgame.swf で設定したゲーム速度を次のように変更する必要があります。

var gameSpeed:uint = 10 * numericStepper.value;

しかし、ステッパーとゲームスピードが異なるファイルからのものであるため、問題が発生していると思います。

誰かアイデアをください。

また、ゲーム ファイルにステッパーを作成して、次のコードを使用してみました。

var gameLevel:NumericStepper = new NumericStepper(); 
gameLevel.maximum = 10; 
gameLevel.minimum = 1; 
addChild(gameLevel); 
var gameSpeed:uint = 10 * gameLevel.value; 

なぜかステージ上でステッパーが点滅するだけでエラーが出ずゲームが動かない

4

2 に答える 2

0

編集:ええ、このコードをすべて入力するのはちょっと悲しいことだと思います(特に、感謝を言うほど感謝していない人もいるからです)が、この質問はコードを正当化するのに十分重要であると思います未来も。


やあ、

あなたは近かった。ゲームファイルに を入れてvar _setgameSpeedから、イントロからそれを調整することもできflashgame._setgameSpeed = gameSpeed;ます。最初に flashgame への参照も設定する必要があるため、少し複雑です。説明させてください...

理想的には、すべてのコードを 1 か所に配置する必要があります (.as ファイルが最適ですが...) タイムラインを使用する場合は、「アクション」と呼ばれる新しい空のレイヤーを作成し、すべてのコードを最初に配置する必要がありますその枠。

また、ボタンを movieClip タイプに変更し、その中のコードをすべて削除します。これは、すべてが「アクション」レイヤーのコードによって制御されるためです。この例では、「btn_load_SWF」というインスタンス名のムービークリップがステージ上にあります。

Intro.swf (親 SWF ファイル)

var my_Game_Swf:MovieClip; //reference name when accessing "flashgame.swf"
var _SWF_is_loaded:Boolean = false; //initial value
var set_gameSpeed:int; //temp value holder for speed

var swf_loader:Loader = new Loader();
btn_load_SWF.buttonMode = true; //instance name of movieclip used as "load" button
btn_load_SWF.addEventListener(MouseEvent.CLICK, load_Game_SWF);

function load_Game_SWF (event:MouseEvent) : void 
{ 
 //set_gameSpeed = 10 * numericStepper.value;
 set_gameSpeed = 100; //manual set cos I dont have the above numericStepper

 if ( _SWF_is_loaded == true)
 { 
   stage.removeChild(swf_loader);
   swf_loader.load ( new URLRequest ("flashgame.swf") );
 }
 else
 {  swf_loader.load ( new URLRequest ("flashgame.swf") ); }

 swf_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, Game_SWF_ready);

} 

function Game_SWF_ready (evt:Event) : void
{

  swf_loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, Game_SWF_ready); 

  //Treat the Loader contents (flashgame.swf) as a MovieClip named "my_Game_Swf"
  my_Game_Swf = swf_loader.content as MovieClip; 
  my_Game_Swf.gameSpeed = set_gameSpeed; //update gameSpeed variable in flashgame.swf
  //also adjust SWF placement (.x and .y positions etc) here if necessary   

  stage.addChild(my_Game_Swf);
  _SWF_is_loaded = true;

}

次に、Flashgame ファイルにアクション レイヤーがあることを確認し、以下のようなコードを挿入してから、Intro/Parent ファイルをデバッグする前に最初にコンパイルします。Intro が flashgame.swf をロードすると、以下のコードが既にコンパイルされている swf がロードされます。

フラッシュゲーム.swf

var gameSpeed:int;
gameSpeed = 0; //initial value & will be changed by parent

addEventListener(Event.ADDED_TO_STAGE, onAdded_toStage);

function onAdded_toStage (e:Event):void
{

trace("trace gameSpeed is.." + String(gameSpeed)); //confirm speed in Debugger

//*** Example usage ***          
var my_shape:Shape = new Shape();
my_shape.graphics.lineStyle(5, 0xFF0000, 5);
my_shape.graphics.moveTo(10, 50); 
my_shape.graphics.lineTo(gameSpeed * 10, 50); //this line length is affected by gameSpeed as set in parent SWF
addChild(my_shape);
}

intro.swf の重要な行は次のとおりです。これmy_Game_Swf.gameSpeed = set_gameSpeed;は、親 SWF の変数から取得した量で flashgame.swf の変数 (my_Game_Swf と呼ばれる) を更新するためです。

これは、2 つの個別の SWF ファイル間で情報にアクセスする方法の 1 つにすぎません。それが役立つことを願っています。

于 2013-11-08T13:23:44.930 に答える