2013-05-21 99 views
0

好吧,所以我设法做了一次之前,但我根本不记得如何或找到我当时发现的来源。我正在制作一个简单的Flash游戏。有几个角色在移动。为了使每个级别比另一个级别更难,我决定改变每个角色从一级到另一级的移动速度。如果我在第1帧的主时间轴上声明和赋值这些变量,它不会按照我想要的方式工作。当你到达另一个框架中的第2级时,速度会像它应该那样上升。但是当您进入更高级别(更高移动速度)的下一级时,值分配会再次进行处理,这意味着移动速度会变回原点。AS3全局变量

//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文件中执行操作的说明。提前致谢!

回答

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); 
} 

应该工作,我想。

0

我想你应该尝试改变它

package{ 

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

} 

,然后通过

trace(Speed.SPEED) 

访问它不过:这是非常肮脏:)

+0

如果命名类像'GlobalConstants'和使用'const'关键字,而不是'var'它不是那么糟糕。 – TheDarkIn1978

+0

是的,如果他使用它为常量:) 他want's使用全局变量。 – codingbuddha

+0

感谢您输入每个人的事情是,就像我说的,如果我把这些变量在一个类中我必须把“变种速度:速度=新速度();”在时间轴上的代码中访问它。此代码运行良好,直到游戏返回到第1帧,然后此代码再次运行,重置速度值。这又回到了6至5,而不是上升到7 我知道,我已经得到了它早些时候像这样的工作: 包 { 公共变种速度:INT = 5; } 类似的东西ATLEAST,但这个确切的代码将无法正常工作,我找做的正是这种正确的方式,我似乎不能这样做的权利=( –

0

行,所以我发现了一个小的解决方法,而不是单独包中的全局变量,但可以通过整个时间轴访问的变量。

我只用简单的代码做一个额外的框架。在这个框架中,我把我的变量+一个frameCounter变量。在我的第一帧我把这个代码:

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

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