Actionscript 3 改变世界';他在Flash朋克

Actionscript 3 改变世界';他在Flash朋克,actionscript-3,flash,Actionscript 3,Flash,我试图在AS3中制作我的第一个实际的游戏,因为它简单,所以我使用flashpunk 当我走到门前时,我有一个移动的角色和一个文本框 当我站在门前时,玩家类中的两个变量发生了变化: public var onDoor:Boolean = false; public var doorType:String = "" 你大概可以猜到onDoor做了什么,doorType是类的名称。设置如下: public static var BedroomDoor:Door = new Door(350,

我试图在AS3中制作我的第一个实际的游戏,因为它简单,所以我使用flashpunk

当我走到门前时,我有一个移动的角色和一个文本框

当我站在门前时,玩家类中的两个变量发生了变化:

public var onDoor:Boolean = false;
public var doorType:String = ""
你大概可以猜到onDoor做了什么,doorType是类的名称。设置如下:

    public static var BedroomDoor:Door = new Door(350, 331, "ApartmentBedroom")
public static function ChangeLevel(world:String)
{ 
    var allLevelsClasses:Array = [ApartmentBedroom, ApartmentLivingRoom]; // put everything here

    var newWorld = getDefinitionByName(world) as Class
    FP.world = new newWorld
}
公寓门卧室是门通向的世界的名字

在初始化flashpunk的主类中,我有以下函数:

    public static function ChangeLevel(world:String)
    { 
        var newWorld = getDefinitionByName(world) as Class
        FP.world = new newWorld
    }
但是,当我走到门并在调用该函数的门前按X时,我总是会出现以下错误:

[Fault]异常,信息=ReferenceError:Error#1065:未定义可变公寓卧室


有人能帮你解决这个问题吗?

为了使用
getDefinitionByName()
你必须先在代码中包含你的类。任何事情都可以,例如简单
var a:apartment卧房或更复杂的一个,如
var allLevelsClasses:Array=[Apartment卧房,ApartmentLivingRoom]

因此,Main.as代码应该如下所示:

    public static var BedroomDoor:Door = new Door(350, 331, "ApartmentBedroom")
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构造函数中,只需传递world的类:

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)

无论何时使用
getDefinitionByName(classname)
,类名都应该包含完整的包路径
getDefinitionByName(“com.your.domain.apartment卧房”)
像这样吗?getDefinitionByName(“com.Worlds.apartment卧房”)。我还是会犯同样的错误。Worlds是package Apartment卧房所在。AS3语法不允许在package name中使用大写首字母。同样的事情。getDefinitionByName(“com.worlds.apartment卧房”)1.包名正确吗?/2.这没有错误吗<代码>新公寓卧室()