我试图将一个变量“预算”从我的Flash文件的DocumentClass传递给一个类。
目前我有:
(DocumentClassv5,这是附加到属性面板中的flash文件的代码,一些代码被省略)
package
{
import flash.display.MovieClip;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.*;
import flash.ui.Keyboard;
import flash.display.Stage;
import flash.text.TextFieldType;
import flash.media.Sound;
import flash.media.SoundChannel;
import miniGameOne;
import floorTileMC;
import flash.display.Loader;
import flash.net.URLRequest;
public class DocumentClassv5 extends MovieClip
{
/*#################################
## Defining Variables ##
#################################*/
public var budget:int = 0;
var gameOne:miniGameOne = new miniGameOne();
/*#################################
## Constructor ##
#################################*/
public function DocumentClassv5()
{
/*#################################
## Adding Event Listeners ##
#################################*/
trace("Document class loaded");
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*###################################################
## Begins the mini game ##
###################################################*/
public function begin(evt: MouseEvent)
{
beginGame.visible = false;
beginGame.removeEventListener(MouseEvent.CLICK, begin);
budget = 500;
cleanListeners();
gameOne.loadGame();
trace(gameOne.testVar);
trace(floorTile.testVar2);
/*#################################
## Adding Event Listeners ##
#################################*/
trace("Game started");
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
}
然后我有miniGameOne类文件,目前什么都不做
我还有另一个名为tileFloorMC的类文件。这附在符号上。
package
{
import flash.display.MovieClip;
import flash.events.MouseEvent;
import DocumentClassv5;
public class floorTileMC extends MovieClip
{
var propertyA:Number;
//var hackerClass:DocumentClassv5 = new DocumentClassv5;
public var testVar2:int = 50;
public function floorTileMC()
{
this.propertyA = randomRange(100, 500);
this.addEventListener(MouseEvent.ROLL_OVER, manageMouseOver, false, 0, true);
this.addEventListener(MouseEvent.ROLL_OUT, manageMouseOut, false, 0, true);
}
private function manageMouseOver(evt: MouseEvent)
{
this.gotoAndStop(2);
//trace(mainClass.budget);
}
private function manageMouseOut(evt: MouseEvent)
{
this.gotoAndStop(1);
//mainClass.budget += 1;
}
private function randomRange(minNum:Number, maxNum:Number):Number
{
return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
}
}
}
现在,基本上我需要能够将预算从DocumentClassv5传递到floorTileMC,然后返回到DocumentClassv5。目前,我可以从floorTileMC传递任何东西,从miniGameOne到DocumentClassv5,但是当我尝试从floorTileMC传递到DocumentClassv5时,我得到错误 错误#2136:SWF文件文件:///yadayada/GameV5.swf包含无效数据。
更具体地说,只要我取消注释// var hackerClass:DocumentClassv5 = new DocumentClassv5;
非常感谢任何帮助!
谢谢,
蒂芙尼
答案 0 :(得分:1)
您正试图在子类中实例化您的文档类:
var hackerClass:DocumentClassv5 = new DocumentClassv5();
您希望访问权限访问现有实例,而不是创建新实例。
您可以做的一件事是创建对文档类的静态引用。 (见下面的代码示例)
静态引用可能会变得丑陋,您可能只想在实例化时将doc类的引用传递给其他类。
以下两种方法:
在您的文档类中:
//instead of the line below:
var gameOne:miniGameOne = new miniGameOne(); //It's a bad idea to instantiate non primitive objects before the constructor of your document class runs.
//just declare it, and instantiate it in the constructor
var gameOne:miniGameOne;
//if you want to use a static reference:
public static var me:DocumentClassv5;
public function DocumentClassv5()
{
/*#################################
## Adding Event Listeners ##
#################################*/
//if using the static var me, set it's value to this (the instance of the document class):
me = this;
trace("Document class loaded");
gameOne = new miniGameOne(this); //pass a reference to the document class if NOT using the static var me
}
如果使用static var me,可以通过从任何类执行以下操作来访问它:
DocumentClassV5.me.budget;
另一个更清晰的替代方案(如果你需要访问的值并不真正直接绑定到任何类,例如全局首选项),那就是创建一个全新的类,它只是静态的(不会被实例化)来保存你的偏好。
package {
public class Global {
public static var budget:Number = 50;
}
}
然后,您可以通过导入Global类并执行Global.budget = 5