AS3全局变量

时间:2013-05-21 03:20:39

标签: actionscript-3 flash class variables global-variables

好的,所以我曾经设法做过一次,但我根本不记得如何或找到我当时发现的来源。我正在制作一个简单的Flash游戏。有几个角色在移动。为了使每个级别比另一个级别更难,我决定将每个角色的移动速度从一个级别改为另一个级别。如果我在第1帧的主时间轴上声明并为这些变量赋值,它就不会按照我想要的方式工作。当你进入另一帧的2级时,速度就会升高。但是当你进入下一级别,即级别1,移动速度更高时,会再次处理值分配,这意味着移动速度会回到划痕。

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

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

然后第1帧上的所有代码再次运行,将“speed”的值设置回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文件中的操作的说明。提前谢谢!

3 个答案:

答案 0 :(得分:0)

它是否在第1帧和第2帧之间循环?如果是,请使用函数来代替。你不需要.fla。

//Declare variables
var speed:int = 5;

//In this case I use a button to transit into the frame. Edit the code as you wish.
btnLevel1.addEventListener(MouseEvent.CLICK, level1);

private function level1(e:MouseEvent):void
{
MovieClip(root).gotoAndStop(2);
speed++;
//Your other code for the level goes here

btnLevel2.addEventListener(MouseEvent.CLICK, level2);
}

private function level2(e:MouseEvent):void
{
MovieClip(root).gotoandStop(3);
speed++;
//Again, your other code goes here

btnLevel1.addEventListener(MouseEvent.CLICK, level1);
}

我认为应该有效。

答案 1 :(得分:0)

我认为您应该尝试将其更改为

package{

    public class Speed{
          public static var SPEED:int = 5;
    }

}

然后通过

访问它
trace(Speed.SPEED)

但是:这很脏:)

答案 2 :(得分:0)

好的,所以我找到了一个小解决方法,而不是单独包中的全局变量,而是可以通过我的整个时间线访问的变量。

我只用代码制作了一个额外的框架。在这个框架中,我把我的变量+一个frameCounter变量。在我的第一帧,我把这段代码:

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

因此声明变量的代码只运行一次。可能不是最好的解决方案,但至少它按预期工作=)