我试图在AS3中制作我的第一个实际游戏,为此我使用flashpunk,因为它非常简单。
当我走到门口时,我已经到了可以移动角色和文本框的地步。
当我在门前时,在玩家类内部改变了两个变量:
public var onDoor:Boolean = false;
public var doorType:String = ""
您可能猜到onDoor的作用,doorType是该类的名称。它的设置如下:
public static var BedroomDoor:Door = new Door(350, 331, "ApartmentBedroom")
ApartmenBedroom是门通向世界的名字。
在flashpunk初始化的主类中,我有这个功能:
public static function ChangeLevel(world:String)
{
var newWorld = getDefinitionByName(world) as Class
FP.world = new newWorld
}
但是当我走到门口并按下调用该功能的门前面的X时,我总是收到这个错误:
[Fault] exception,information = ReferenceError:错误#1065:未定义变量ApartmentBedroom。
有人可以帮忙解决这个问题吗?
答案 0 :(得分:1)
要使用getDefinitionByName()
,您必须先在代码中包含您的类。任何事都可以,例如简单的var a:ApartmentBedroom;
或更复杂的var allLevelsClasses:Array = [ApartmentBedroom, ApartmentLivingRoom];
因此,您的Main.as代码应如下所示:
public static function ChangeLevel(world:String)
{
var allLevelsClasses:Array = [ApartmentBedroom, ApartmentLivingRoom]; // put everything here
var newWorld = getDefinitionByName(world) as Class
FP.world = new newWorld
}
创建Door时,您也可以避免完整的类名混淆。而不是将带有名称的字符串传递给Door构造函数,只需传递世界的类:
private var worldClassName:String;
public function Door(x:Number, y:Number, worldClass:Class):void
{
/// init what's necessary
this.worldClassName = getQualifiedClassName(worldClass);
}
后来只是:
public static var BedroomDoor:Door = new Door(350, 331, ApartmentBedroom)