DFdou's Blog Life is short,Be yourself.

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;
		}
	}
}

Some Related Posts

Comments (2) Trackbacks (0)
  1. getdefinitionbyname有的时候一定要记得在用到的地方声明该类,不然会包变量会定义,唉,杯具。
    import在没有反射的时候是不会导入滴~~

    [Reply]


Leave a comment

:zhuang :xizao :wuwu :wenhao :wc :touxiang :shuaya :shuajian :shengtian :paopao :no :meinv :maonv :loveu :leilei :kua :jrjr :dahan :chi :chaocai :byebye


CommentLuv Enabled

No trackbacks yet.