Browsed by
分类:AS3探究

AS3中的Inline(内联函数)

AS3中的Inline(内联函数)

内联函数

是将在函数被调用的地方使用替换成该函数实际的代码,这样就少了一次函数调用,也就少了很多地址查找,入栈出栈的操作,对于频繁调用的函数,就会有明显的性能提升。

Flash Builder 4.7设置

1、AIR SDK 3.4以上版本才附带ASC 2.0。

2、在“项目属性——ActionScript编译器——附加的编译器参数”中填写“-inline”。

函数成为内联函数的前提条件

1、只有标记为 final、static 的函数或全局函数才能嵌入[Inline]。

2、函数不能报考任何Activation Object(包括…参数和arguments对象)。

3、函数不能包含任意try catch或width语句。

4、函数不能包含任何函数闭包。

5、函数体不能超过50条语句。

测试结论

1、final或static的getter和setter函数会自动成为内联函数,不需要[Inline]元数据,且在未开启“-inline”参数时,已默认为内联函数。

2、闭包(function内含function)不能成为内联函数,且自身效率非常低。

延伸阅读:http://gotoandlearn.com/play.php?id=170(gotoandlearn的视频)



							
File移动平台目录位置总结

File移动平台目录位置总结

在移动开发时,我们往往会疑惑该用File的哪个目录来进行文件存储和访问等,今天特意总结一下:

这是Adobe官方给出的Andriod和IOS平台的目录信息:

平台 目录类型 典型的文件系统位置
Android 应用程序 /data/data/
应用程序存储 /data/data/air.applicationID/filename/Local Store
缓存 /data/data/applicationID/cache
桌面 /mnt/sdcard
文档 /mnt/sdcard
临时 /data/data/applicationID/cache/FlashTmp.randomString
用户 /mnt/sdcard
iOS 应用程序 /var/mobile/Applications/uid/filename.app
应用程序存储 /var/mobile/Applications/uid/Library/Application Support/applicationID/Local Store
缓存 /var/mobile/Applications/uid/Library/Caches
桌面 不可访问
文档 /var/mobile/Applications/uid/Documents
临时 /private/var/mobile/Applications/uid/tmp/FlashTmpNNN
用户 不可访问

 

以下是File个静态目录在Android和IOS上的情况:

Android iOS
File.applicationDirectory 通过 URL 只读(非本机路径) 只读
File.applicationStorageDirectory 可用 可用
File.cacheDirectory 可用 可用
File.desktopDirectory SDCard 的根目录 不可用
File.documentsDirectory SDCard 的根目录 可用
File.userDirectory SDCard 的根目录 不可用
File.createTempDirectory() 可用 可用
File.createTempFile() 可用 可用

 

友情提示:博主一直用的File.documentsDirectory,非常好用!

延伸阅读:http://help.adobe.com/zh_CN/as3/dev/WS5b3ccc516d4fbf351e63e3d118666ade46-7fe4.html

Flash AS3.0 常用函数收集,总有几条你没注意的

Flash AS3.0 常用函数收集,总有几条你没注意的

以下知识点,适合初级和中级Aser,大牛无视!

获得某个实例对象的类名:getQualifiedClassName (实例名字符串表达式);

 

stage.addEventListener(MouseEvent.MOUSE_OVER, mouseOverHandle);

function mouseOverHandle(e:Event):void {

     trace(“over”);

     //   返回instance**之类的        

     trace(e.target.name);

     //返回元件名   

     trace(getQualifiedClassName(e.target));

}

 

Math.random();

范围为0~1

如 果想要0~100的话就是

Math.random()*100

随机出 [n,m]范围的随机数

function randRange(min:Number, max:Number):Number {

var randomNum:Number = Math.floor(Math.random() * (max – min + 1)) + min;

return randomNum;

}

 

应用例子:

模拟投银币,即希望得到随机布尔值(true 或 false): randRange(0, 1);

模拟投骰子,即希望得到随机六个值: randRange(1, 6);

输出10个随机数

for (var i = 0; i < 10; i++) {

var n:Number = randRange(1, 10)

trace(n);

}

 

【把数字取至最近的小数点位,即指定精确度】

1. 决定你要取的数字的小数点位数:例如,如果你想把90.337取成90.34,就表示你要取到两位小数点位,也就是说你想取至最近的0.01;

2. 让输入值除以步骤1所选的数字(此例为0.01);

3. 使用Math.round()把步骤2所计得的值取成最近的整数;

4. 把步骤3所得的结果乘以步骤2用于除法的那个值.

例如,要把90.337取成两个小数点位数,可以使用:

trace(Math.round(90.337/0.01)*0.01); //输出:90.34

 

【把数字取成一个整数的最接近倍数值】

例1,这样会把92.5取成5的最近倍数值:

trace(Math.round(92.5/5)*5); //输出:95

例2,这样会把92.5取成10的最近倍数值:

trace(Math.round(92.5/10)*10); //输出:90

 

【private,protected,internal,public访问权限】

private:只能在类本身内部访问,按惯例,命名私有成员时以下划线”_”开头;

protected:可以由类本身或任何子类访问.但这是以实例为基础的.换言之,类实例可以访问自己的保护成员或者父类的保护成员,但不能访问相同类的其它实例的保护成员,按惯例,命名保护成员时以下划线”_”开头;

internal:可以由类本身或者相同包内的任何类访问;

public:可以在类内部访问,也可以由类实例访问,或者声明为static时,可以直接从类访问.

 

【检查变量类型并返回布尔值】

is

【检查变量类型并返回类型】

typeof

【检查对象类型并返回该对象】

as

【Timer类注意事项】

不要认为Timer可以极其准确;使用Timer时间间隔不要低于10毫秒.

 

【一个函数具有未知个数的参数,用arguments对象或”…(rest)”符号访问它的参数】

注意:使用”…(rest)”参数会使 arguments 对象不可用;

private funciton average():void{

     trace(arguments.length); //输出参数的个数

     // arguments的类型是:object,但可以像访问数组一样去访问它

     trace(arguments[1]); //输出第二个参数

}

private function average(…argu):void{

     trace(argu[1]); //输出第二个参数,argu参数名是自定义的.

}

【隐式的取出方法(getter)和设定方法(setter)】

public function get count():uint {

     return _count;

}

public function set count(value:uint):uint {

     if(value < 100){

         _count = value;

     }else {

         throw Error();

     }

}

【确保类是绝不会有子类,使用final】

 

final public class Example{}

 

【super关键字的使用】

super(); //父类的构造函数,只能在类实例构造函数内部使用

super.propertyName; //调用父类的属性,属性需要声明为public或protected

super.methodName(); //调用父类的方法,方法需要声明为public或protected

 

【在数组中获取最小或最大值】

var scores:Array = [10, 4, 15, 8];

scores.sort(Array.NUMERIC);

trace(“Minimum: ” + scores[0]);

trace(“Maximum: ” + scores[scores.length – 1]);

 

【计算两点之间的距离】

勾股定理: c2 = a2 + b2

假设有两个影片剪辑mc1和mc2,则它们两点间的距离c为:

var c:Number = Math.sqrt(Math.pow(mc1.x – mc2.x, 2) + Math.pow(mc1.y – mc2.y, 2));

【指出容器的显示清单中有多少显示对象】

每个容器都有numChildren属性.

【关于TextField以垂直方式把文字摆在按钮表面中心点的小技巧】

textField.y = (_height – textField.textHeight) / 2;

textField.y -= 2; //减2个像素以调整偏移量

【过滤文字输入】

TextField.restrict = “此处为可输入的内容”;

field.restrict = “^此处为禁止输入的内容”;

restrict属性支持一些类似正则表达式的样式:

field.restrict = “a-zA-z”; //只允许大小字母

field.restrict = “a-zA-z “; //只允许字母和空格

field.restrict = “0-9”; //只允许数字

field.restrict = “^abcdefg”; //除了小写字母abcdefg不允许外,其它都允许

field.restrict = “^a-z”; //所有小写字母都不允许,但是,其它内容都允许,包括大写字母

field.restrict = “0-9^5”; //只允许数字,但5例外

让restrict字符包含具有特殊意义的字母(例如-和^):

field.restrict = “0-9\\-“; //允许数字和破折号

field.restrict = “0-9\\^”; //允许数字和^

field.restrict = “0-9\\\\”; //允许数字和反斜杠

你也可以使用Unicode转义序列,指定允许的内容.例如:

field.restrict = “^\u001A”;

注意:ActionScript有区分大小写的,如果restrict属性设为abc,允许字母的大写形式(A,B和C)输入时会变成小写对待形式(a,b和c),反之亦然.restrict属性只影响用户可以输入的内容,脚本可将任何文本放入文本字段中.

【设定输入框的最大长度】

TextField.maxChars:int

【检测播放器版本】

flash.system.Capabilities.version

对于8.5版以前的任何Flash Player版本,这种方法都不适用.

【判断客户端系统】

flash.system.Capabilities.os

【检测播放器类型】

flash.system.Capabilities.playerType

可能的值有:

“StandAlone”,用于独立的 Flash Player

“External”,用于外部的 Flash Player 或处于测试模式下

“PlugIn”,用于 Flash Player 浏览器插件

“ActiveX”,用于 Microsoft Internet Explorer 使用的 Flash Player ActiveX 控件

【检测系统语言】

flash.system.Capabilities.language

【判断用户是否启用了IME(输入法编辑器)】

flash.system.IME.enabled

【检测屏幕的分辨率】

flash.system.Capabilities.screenResolutionX

flash.system.Capabilities.screenResolutionY

【把弹出窗口居中的算法】

X = (舞台宽/2)-(窗口宽/2)

Y = (舞台高/2)-(窗口高/2)

【控制影片配合Player的方式,包括缩放问题】

stage.scaleMode

可供选择值:flash.display.StageScaleMode

【舞台的对齐方式】

stage.align

可供选择值:flash.display.StageAlign

【隐藏Flash Player的右键菜单】

stage.showDefaultContextMenu = false;

【检测系统是否具有音频功能】

flash.system.Capabilities.hasAudio

【检测播放器是在具有MP3解码器的系统上运行,还是在没有MP3解码器的系统上运行】

flash.system.Capabilities.hasMP3

【检测播放器能 (true) 还是不能 (false) 播放流式视频】

flash.system.Capabilities.hasStreamingVideo

【检测播放器是在支持 (true) 嵌入视频的系统上运行,还是在不支持 (false) 嵌入视频的系统上运行】

flash.system.Capabilities.hasEmbeddedVideo

【检测播放器能 (true) 还是不能 (false) 对视频流(如来自 Web 摄像头的视频流)进行编码】

flash.system.Capabilities.hasVideoEncoder

【显示 Flash Player 中的”安全设置”面板】

flash.system.Security.showSettings();

可供选择项:flash.system.SecurityPanel

 

关于单例模式的写法和理解

关于单例模式的写法和理解

网上或者在群里看到的单例写法蛮多,我也随便写点,也好给别人点参考。

目前作者常用的单例写法:

[codesyntax lang=”actionscript3″]

package
{
	public class Test
	{
		private static var instance:Test=null;
		public function Test(p:Param)
		{
		}
		public static function getInstance():Test{
			return instance||=new Test(new Param());
		}
	}
}
class Param{}

[/codesyntax]

“||=”如果你觉得不好用,或者有问题的话,也可以换成常规的if判断。

作者使用单例写法历经了三个阶段:

第一阶段:仅加个getInstance。如下:

[codesyntax lang=”php”]

package
{
	public class Test
	{
		private static var instance:Test=null;
		public function Test()
		{
		}
		public static function getInstance():Test{
			if(instance==null){
				instance=new Test();
			}
			return instance;
		}
	}
}

[/codesyntax]

这种单例写法算是入门级的吧,无法防止别人通过new创建,只能靠人为的记住这个类是单例。

 

第二阶段:在构造函数抛错误

[codesyntax lang=”actionscript3″]

package
{
	public class Test
	{
		private static var instance:Test=null;
		public function Test()
		{
			if(instance!=null){
				throw new Error("this is a singleton class");
			}
		}
		public static function getInstance():Test{
			if(instance==null){
				instance=new Test();
			}
			return instance;
		}
	}
}

[/codesyntax]

这种写法,虽然可以防止别人通过new创建,但这要到运行的时候才会抛出错误。

第三阶段:加包外类参数

[codesyntax lang=”actionscript3″]

package
{
	public class Test
	{
		private static var instance:Test=null;
		public function Test(p:Param)
		{
		}
		public static function getInstance():Test{
			if(instance==null){
				instance=new Test(new Param());
			}
			return instance;
		}
	}
}
class Param{}

[/codesyntax]

这种写法可以在编写代码的时候就避免别人通过new来创建实例,比起运行时才报错要更好一些。

 

单例,感觉在系统里比较适合同于一些管理器之类的功能,比如资源加载管理器,声音管理器等等。当然整个系统架构里面也会经常用到。单例模式应该算是最常用的设计模式之一。当然,单例也不能滥用!

 

 

starling 粒子系统学习(Particle-System)

starling 粒子系统学习(Particle-System)

学习Starling的粒子效果,做了个关于火柴燃烧效果的小应用。

火柴效果

主要代码如下:

[codesyntax lang=”actionscript3″]

package
{
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;

	import starling.core.Starling;
	[SWF(width="480", height="800", frameRate="60", backgroundColor="0x333333")]
	public class ParticlesTest extends Sprite
	{
		public function ParticlesTest()
		{
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;

			var myStarling:Starling = new Starling(Game,stage);
			myStarling.showStats = true;
			myStarling.start();
		}
	}
}

[/codesyntax]

[codesyntax lang=”actionscript3″]

package
{
	import starling.core.Starling;
	import starling.display.Image;
	import starling.display.Sprite;
	import starling.events.Event;
	import starling.events.TouchEvent;
	import starling.extensions.PDParticleSystem;
	import starling.extensions.ParticleSystem;
	import starling.textures.Texture;

	public class Game extends Sprite
	{
		[Embed(source="../assets/match_fire.pex", mimeType="application/octet-stream")]
		private static const MatchFireConfig:Class;

		[Embed(source="../assets/match_fire.png")]
		private static const FirePng:Class;

		[Embed(source="../assets/match_begin.png")]
		private static const MatchBeginPng:Class;
		[Embed(source="../assets/match_ing.png")]
		private static const MatchIngPng:Class;
		[Embed(source="../assets/match_end.png")]
		private static const MatchEndPng:Class;

		private var particleSystem:ParticleSystem;
		private var matchBegin:Image;
		private var matchIng:Image;
		private var matchEnd:Image;
		private var status:String;
		private const STATUS_BEGIN:String = "BEGIN";
		private const STATUS_ING:String = "ING";
		private const STATUS_END:String = "END";

		public function Game()
		{
			addEventListener(Event.ADDED_TO_STAGE,addToStage);
		}

		private function addToStage(e:Event):void
		{
			this.matchBegin = new Image(Texture.fromBitmap(new MatchBeginPng()));
			this.matchIng = new Image(Texture.fromBitmap(new MatchIngPng()));
			this.matchEnd = new Image(Texture.fromBitmap(new MatchEndPng()));
			addChild(matchBegin);
			addChild(matchIng);
			addChild(matchEnd);

			var config:XML = XML(new MatchFireConfig());
			var texture:Texture = Texture.fromBitmap(new FirePng());
			this.particleSystem = new PDParticleSystem(config,texture);
			particleSystem.stop();
			addChild(particleSystem);
			particleSystem.emitterX = 98;
			particleSystem.emitterY = 140;
			particleSystem.alpha = 0.5;
			particleSystem.scaleX = particleSystem.scaleY = 2.5;
			Starling.juggler.add(particleSystem);

			addEventListener(TouchEvent.TOUCH,touchHandler);
			this.status = STATUS_BEGIN;
			updateStatus();
		}

		private function touchHandler(e:TouchEvent):void
		{
			if(status == STATUS_BEGIN){
				status = STATUS_ING;
			}else if(status ==STATUS_ING){
				status = STATUS_END;
			}else if(status ==STATUS_END){
				status = STATUS_BEGIN;
			}
			updateStatus();
		}

		private function updateStatus():void{
			this.matchBegin.visible = status ==STATUS_BEGIN;
			this.matchIng.visible = status ==STATUS_ING;
			this.matchEnd.visible = status ==STATUS_END;

			if(status == STATUS_ING){
				particleSystem.start();
			}else{
				particleSystem.pause();
			}
		}
	}
}

[/codesyntax]

 

发布了一个apk,有Andriod的朋友可以试试,设定的60帧/s,最低会掉到30帧/s,没优化.(手机是htc g12的,480×800 如果手机屏幕不一样的话 可能坐标略有差别)

下载(apk): [download id=”14″ format=”2″]

项目源码下载:[download id=”15″]  (环境: Flash Builder 4.7  两个类库(starling和particle system)没有打包,可以在下面的地址下载下)

相关学习资料:

starling源码:https://github.com/PrimaryFeather/Starling-Framework

粒子系统:https://github.com/PrimaryFeather/Starling-Extension-Particle-System

粒子系统在线编辑器:http://onebyonedesign.com/flash/particleeditor/

 

获取Obj变量地图

获取Obj变量地图

获取Obj上的所有public属性,可以用于两个对象的属性的快速匹配,详情请见 flash.utils.describeType 方法的API

[codesyntax lang=”actionscript3″]

		public function initParams(obj:Object):void{
			this.paramVo = new ParamsVo();
			var obj:Object = getVariablesMapObj(paramVo);
			for(var i:String in obj){
				trace(i);
				if(obj.hasOwnProperty(i)){
					paramVo[i] = obj[i];
				}
			}
		}

		/**
		 * 获得变量地图
		 * @param target
		 * @return
		 *
		 */
		private function getVariablesMapObj(target:Object):Object
		{
			var obj:Object = new Object();
			var dt:XML=describeType(target);
			for each(var node:XML in dt.variable)
			{
				obj[node.@name] = node.@type;
			}
			return obj;
		}

[/codesyntax]

在mxml中addChild一个sprite

在mxml中addChild一个sprite

在flex项目中讲一个没有继承UIComponent的flash的DisplayObject加载(addChild)到舞台上

[codesyntax lang=”actionscript3″]

<?xml version="1.0" encoding="utf-8"?>
<s:Application name="Spark_SpriteVisualElement_addChild_test"
        xmlns:fx="http://ns.adobe.com/mxml/2009"
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:mx="library://ns.adobe.com/flex/halo"
        initialize="init();">

    <fx:Script>
        <![CDATA[
            private spr1:Sprite = new Sprite();

            private function init():void {
                spr1.graphics.beginFill(0xFF0000, 0.5);
                spr1.graphics.drawRect(10, 10, 100, 80);
                spr1.graphics.endFill();
                con.addChild(spr1);
            }
        ]]>
    </fx:Script>

    <s:SpriteVisualElement id="con" />

</s:Application>

[/codesyntax]

as3.0 用代码设置“调整颜色”滤镜——–即:亮度、对比度、饱和度、色相的调整

as3.0 用代码设置“调整颜色”滤镜——–即:亮度、对比度、饱和度、色相的调整

相信大家对滤镜这东西,在flash IDE内应用很熟吧?但是在as内怎么用代码实现呢?这个问题还别说,起初真有点犯难,后经高手指点,逐一化解。经验不敢独享,故与大家分享(高手可掠过)。如有疑问,请多多提出咯……

 

import fl.motion.ColorMatrix;

import flash.filters.ColorMatrixFilter;

 

//**调整亮度**//

var ld_Matrix:ColorMatrix=new ColorMatrix();

var ld_Filter:ColorMatrixFilter=new ColorMatrixFilter();

ld_Matrix.SetBrightnessMatrix(100);  //设置亮度值,值的大小是 -255–255   0为中间值,向右为亮向左为暗。

ld_Filter.matrix = ld_Matrix.GetFlatArray();

ld_MC.filters = [ld_Filter];

//ld_MC.filters = [];//去除滤镜

 

//**调整对比度**//

var db_Matrix:ColorMatrix=new ColorMatrix();

var db_Filter:ColorMatrixFilter=new ColorMatrixFilter();

db_Matrix.SetContrastMatrix(255);  //设置对比度值,值的大小是 -255–255  127.5为中间值,向右对比鲜明向左对比偏暗。

db_Filter.matrix = db_Matrix.GetFlatArray();

db_MC.filters = [db_Filter];

//db_MC.filters = [];//去除滤镜

 

//**调整饱和度**//

var bh_Matrix:ColorMatrix=new ColorMatrix();

var bh_Filter:ColorMatrixFilter=new ColorMatrixFilter();

bh_Matrix.SetSaturationMatrix(0);  //设置饱和度值,值的大小是 -255–255   1为中间值,0为灰度值(即黑白相片)。

bh_Filter.matrix = bh_Matrix.GetFlatArray();

bh_MC.filters = [bh_Filter];

//bh_MC.filters = [];//去除滤镜

 

//**调整色相**//

var sx_Matrix:ColorMatrix=new ColorMatrix();

var sx_Filter:ColorMatrixFilter=new ColorMatrixFilter();

sx_Matrix.SetHueMatrix(1);  //设置色相值,值的大小是 -255–255  0为中间值,向右向左一试便知。

sx_Filter.matrix = sx_Matrix.GetFlatArray();

sx_MC.filters = [sx_Filter];

//sx_MC.filters = [];//去除滤镜

 

原文链接:http://bbs.9ria.com/space.php?uid=112507&do=blog&id=12944

开源类库ASSQL初接触,AS直接连mysql数据库

开源类库ASSQL初接触,AS直接连mysql数据库

刚发现这个强大的开源类库,assql,可以让as直接连mysql数据库,猛一下,我觉得豁然开朗,终于,与数据库打交道不需要通过后台了!

之前看网上有人说中文乱码什么,这个问题我没有遇到,我用的是2.8版本,把数据库和表设置为utf-8,中文显示正常!

先给出google项目地址:http://code.google.com/p/assql/

google项目上有几个例子,不过都是Flex的,下面我给个简单纯as的小例子:

[codesyntax lang=”actionscript3″]

package
{
	import com.maclema.mysql.Connection;
	import com.maclema.mysql.MySqlToken;
	import com.maclema.mysql.ResultSet;
	import com.maclema.mysql.Statement;
	import com.maclema.mysql.events.MySqlEvent;

	import flash.display.Sprite;
	import flash.events.Event;

	public class MySqlTest extends Sprite
	{

		private var con:Connection;
		public function MySqlTest()
		{
			con = new Connection("localhost", 3306, "root", "123456", "test");
			con.addEventListener(Event.CONNECT, handleConnected);
			con.connect();
		}

		private function handleConnected(e:Event):void {
			var st:Statement = con.createStatement();
			var token:MySqlToken = st.executeQuery("SELECT * FROM user_info");
			token.addEventListener(MySqlEvent.RESULT,reslutHandler);
		}

		private function reslutHandler(e:MySqlEvent):void
		{
			var rs:ResultSet = e.resultSet;
			rs.first();
			for (var i:int = 0; i < rs.size(); i++) {
				trace(rs.getString("userId"),rs.getString("userName"));
				rs.next();
			}
		}

	}
}

[/codesyntax]

关于中国天气(Weather.com.cn)天气查询,谷歌雅虎天气弱爆了

关于中国天气(Weather.com.cn)天气查询,谷歌雅虎天气弱爆了

最近关注了下天气API方面的东西,最初也是从谷歌和雅虎天气入手,说下这两个天气出现的问题,雅虎天气的问题是你获得的数据都是英文,谷歌天气的问题是你查询的时候必须告诉他城市的拼音名或者城市id什么的,不能通过汉字直接查,有一个小发现共享下,搜狐的查ip时返回的城市id,可以直接用于谷歌天气查询,另外貌似公认的谷歌天气不够全面。

好吧,最后我选择了用中国天气(Weather.com.cn),中国天气 这个网站的数据还是非常全面的,还都是中文的。下面是他的数据获取方式:

城市id获取方式:
1. 访问http://m.weather.com.cn/data5/city.xml?level=0,(后面level参数可省略)得到一级列表(省、 直辖市、自治区),结果用逗号隔开,id和城市名称使用竖线“|”隔开;结果示例如下: 01|北京,02|上海,03|天津,04|重庆,05|黑龙江,06|吉林,07|辽宁,08|内蒙古,09|河北,10|山西,11|陕西,12|山 东,13|新疆,14|西藏,15|青海,16|甘肃,17|宁夏…(以下省略)

2. 访问http://m.weather.com.cn/data5/city01.xml?level=1,(后面level参数可省略)得到二级列表。 其中01是一级省市的id,结果格式和上一层相同;

3. 访问http://m.weather.com.cn/data5/city0101.xml?level=2,(后面level参数可省略)得到三级列 表。0101是地级市的id,示例如下(北京): 010101|北京,010102|海淀,010103|朝阳,010104|顺义,010105|怀柔,010106|通州,010107|昌平…(以下省略)

4. 访问http://m.weather.com.cn/data5/city010101.xml?level=3,(后面level参数可省略)得到最 后一级的id,010101是区域的id,示例如下(北京市区): 010101|101010100 ,后面的数字就是获得天气数据需要的城市id,以http://m.weather.com.cn/data/{id}.html格式访问即可得出天气结果。

但是,这个网站也有一个蛋疼的问题,就是 这个网站只在主域名下有crossdomain.xml文件,即http://weather.com.cn/crossdomain.xml ,在m.weather.com.cn却没有,但是这却不影响其他语言访问,使用js或者php之类的都可以访问,既然AS3不能直接访问,就只好用其他语言中转下咯,比如,可以先从AS3访问php,php将访问weather.com.cn获得的数据返回给AS3。

 

延伸阅读:http://7timer.y234.cn/doc.php?lang=zh-CN#api (另一个天气API)