0

目前,我的 Flash 文件有一个介绍屏幕,其中包含两个对象。一个按钮,它将使用以下方式加载外部闪存文件:

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

第二个是Numeric Stepper,从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

当您执行代码时,步进器没有机会等待用户输入。

这两个指令之间没有时间。

addChild(gameLevel); 
var gameSpeed:uint = 10 * gameLevel.value; 

您应该在 NumericStepper 中等待用户输入,然后在用户事件中设置游戏速度。

于 2013-11-07T20:43:03.353 回答
0

编辑:是的,我知道输入所有这些代码有点难过(特别是因为有些人甚至不会感激地表示感谢)但我认为这个问题很重要,足以证明代码的合理性,因为它可能对其他人有帮助未来也。


你好,

你很亲密。在你的游戏文件中,你可以放一个var _setgameSpeed然后从 Intro 你可以调整它。flashgame._setgameSpeed = gameSpeed;它有点复杂,因为你还必须首先设置对 flashgame 的引用。让我解释...

理想情况下,您希望将所有代码放在一个地方(最好是 .as 文件,但是......)如果您更愿意使用时间线,那么您应该创建一个名为“actions”的新空层并将所有代码放在第一个那个框架。

还将您的按钮更改为movieClip 类型并删除其中的所有代码,因为所有内容都将由“动作”层中的代码控制。在示例中,我在舞台上有那个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)。

这只是您可以访问两个单独的 SWF 文件之间的信息的一种方式。希望它有所帮助。

于 2013-11-08T13:23:44.930 回答