在flashpunk中改变世界

时间:2016-06-17 11:04:07

标签: actionscript-3 flash

我试图在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。

有人可以帮忙解决这个问题吗?

1 个答案:

答案 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)