0

好的,所以我以前曾设法做到这一点,但我根本不记得当时是如何找到或找到的来源。我正在制作一个简单的 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 帧上的所有代码再次运行,将“速度”的值设置回 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);
}

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

于 2013-05-21T20:15:52.680 回答
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);
}

我认为应该工作。

于 2013-05-21T04:10:49.630 回答
0

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

package{

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

}

然后通过

trace(Speed.SPEED)

但是:这很脏:)

于 2013-05-21T04:11:49.463 回答