3010/092
AS3-getDefinitionByName
先来看下CS3版F1的介绍:
public function getDefinitionByName(name:String):Object
语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9
返回 name 参数指定的类的类对象引用。
参数 name:String — 类的名称。
返回 Object — 返回 name 参数指定的类的类对象引用。
引发 ReferenceError — 不存在具有指定名称的公共定义。
下边是一个读取地图信息并显示的实例。文件有点多,先来看主文档,TD.as:
package{
import flash.display.Sprite;
import org.nwhy.TD.Config;
import org.nwhy.TD.Controller;
public class TD extends Sprite{
public var screen:Sprite;
public function TD(){
screen = new Sprite();
addChild(screen);
var game:Controller = new Controller(screen,new Config());
}
}
}
内容很简单,就是建立一个Controller对象,Controller.as如下:
package org.nwhy.TD{
import flash.events.EventDispatcher;
import flash.display.Sprite;
//整个游戏控制类
public class Controller extends EventDispatcher {
private var _view:View;
private var _config:Config;
private var _clip:Sprite;
public function Controller(_root:Sprite,config:Config) {
_config = config;
_clip = new Sprite();
_root.addChild(_clip);
_view = new View(_clip,_config._aryMaps);
}
}
}
这个里边目前只写了建立一个View对象,那看看View.as:
package org.nwhy.TD{
import flash.display.Sprite;
public class View{
private var _map:Map;
public function View(_clip:Sprite,_maps:Array){
_map = new Map(_maps);
_clip.addChild(_map);
}
}
}
终于到Map类了,Map.as:
package org.nwhy.TD{
import flash.display.Sprite;
import flash.utils.getDefinitionByName;
public class Map extends Sprite{
private var _config:MapConfig;
private var _maps:Array;
public function Map(maps:Array){
_maps = maps;
_config = new MapConfig();
createMap();
}
private function createMap(){
var mapwl = _maps.length;
for(var i:uint=0;i<mapwl;i++){
var maprl = _maps[i].length;
for(var j:uint=0;j<maprl;j++){
var _mapType = _maps[i][j];
var _id:Class = getDefinitionByName(_config._aryMapTypes[_mapType]) as Class;
var _tmp:Sprite = new _id();
_tmp.x = (j+0.5)*_config.width;
_tmp.y = (i+0.5)*_config.height;
addChild(_tmp);
}
}
}
}
}
在这个文件里先读取到maps数组信息,也就是一串1-x的数字,然后通过MapConfig对应到Map的类名,然后通过getDefinitionByName生成类,之后就可以创建类对象了。
Config .as:
package org.nwhy.TD{
public class Config {
public var _aryMaps:Array = [[0,2,0,1,1,4,2,6,6,1,1],
[1,1,1,1,1,1,1,1,1,1,6],
[1,1,3,3,3,1,1,1,2,1,5],
[1,2,2,1,0,2,1,1,3,3,2],
[1,1,4,1,1,3,3,2,0,1,1],
[4,1,1,6,3,3,2,5,6,1,5],
];
}
}
MapConfig.as:
package org.nwhy.TD{
public class MapConfig {
public var _aryMapTypes:Array = ["MAP_A","MAP_B","MAP_C","MAP_D","MAP_E","MAP_F","MAP_G"];
private var __width:uint = 50;
private var __height:uint = 50;
public function get width(){
return __width;
}
public function get height(){
return __height;
}
}
}
November 20th, 2009 - 05:51
[Reply]
January 12th, 2010 - 17:38
getdefinitionbyname有的时候一定要记得在用到的地方声明该类,不然会包变量会定义,唉,杯具。
import在没有反射的时候是不会导入滴~~
[Reply]