我正在为大学任务开发游戏,我想创建一个处理fla文件库中所有资源的类。我用OO PHP开发网站近4年,所以我有编程经验,但我是AS3的新手。
资产处理程序类:
package library {
public class AssetHandler {
public var stageWidth: int;
public var stageHeight: int;
public function AssetHandler(sw:int, sh:int):void {
stageWidth = sw;
stageHeight = sh;
}
//Convert asset to bitmap
public function bm(AssetsName:String):Object {
var a:Object = new AssetsName(stageWidth, stageHeight);
return new Bitmap(a);
}
}
}
Main.fla中引用的主类
package {
import flash.display.*;
import library.AssetHandler;
public class Main extends Sprite {
private var cannon:Cannon = new Cannon();
private var holder:Holder = new Holder();
//I want to replace this
public var bdata = new Char(stage.stageWidth, stage.stageHeight);
public var char = new Bitmap(bdata);
//into this
public var asset = new AssetHandler(stage.stageWidth, stage.stageHeight);
public var char = asset.bm("Char");
private var cannonAngle:Number;
public function Main() {
}
}
}
在php中你可以很容易地做$ Class-> $ name(); AS3中是否有类似的方法?
我收到错误: 1180:调用可能未定义的方法AssetsName。 1180:调用可能未定义的方法Bitmap。
我认为由于可见性而未找到Bitmap方法,但我该如何解决? 谢谢!
答案 0 :(得分:3)
1180: Call to a possibly undefined method Bitmap.
您需要导入flash.display.Bitmap
。
1180: Call to a possibly undefined method AssetsName.
如果我没记错的话,你实际上不能像你正在做的那样从String引用中实例化一个类。但是,您可以使用字符串引用执行getDefinitionByName
,并以这种方式实例化类。
public function bm(AssetsName:String):Object {
var classdef:Class = getDefinitionByName(AssetsName) as Class;
var a:Object = new classdef(stageWidth, stageHeight);
return new Bitmap(a);
}
(我认为这是正确的。可能会有一些错误。)(编辑:有 - 错过了“作为班级”部分。)
祝你好运。答案 1 :(得分:1)
我认为你需要这样的东西
如果你需要按字符串引用类:
import flash.utils.getDefinitionByName;
.....
var ClassReference:Class = getDefinitionByName("YourClass") as Class;
如果你想通过字符串调用函数:
var functionName:String = "testFunction";
this[functionName]("hello!");
public function testFunction(param:String):void {
trace(param);
}
希望这对你有所帮助。
<强>更新强>
PHP's $Class->$name() may be assumed as classInstance["name"](); in ActionScript