在闪光朋克中改变世界

Changing world's in flashpunk

我正在尝试在 AS3 中制作我的第一个实际游戏,为此我使用了闪光朋克,因为它很简单。

当我走到门前时,我已经到了这样的地步:我有一个移动的角色和一个文本框。

当我在门前时,播放器中的两个变量发生变化class:

public var onDoor:Boolean = false;
public var doorType:String = ""

你大概可以猜到 onDoor 的作用,doorType 就是 class 的名称。是这样设置的:

    public static var BedroomDoor:Door = new Door(350, 331, "ApartmentBedroom")

ApartmenBedroom 是门通往的世界的名称。

在 flashpunk 初始化的主要 class 里面,我有这个函数:

    public static function ChangeLevel(world:String)
    { 
        var newWorld = getDefinitionByName(world) as Class
        FP.world = new newWorld
    }

但是当我走到门口,在调用该功能的门前按X时,我总是得到这个错误:

[故障]异常,信息=ReferenceError:错误#1065:未定义变量 ApartmentBedroom。

谁能帮忙解决这个问题?

为了使用 getDefinitionByName(),您必须先在代码中包含 class。任何东西都可以,例如简单的 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 时避免完全 class名称混淆。与其将带有名称的字符串传递给 Door 构造函数,不如传递世界的 class:

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)