在闪光朋克中改变世界
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)
我正在尝试在 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)