I Love China

技术·人生

技术服务生活
繁體

Archive for the ‘Flash AS2’ Category

让SWF既能访问网络又能访问本地文件的另类方法

星期五, 10月 10th, 2008

问题:SWF文件a.swf中有2个按钮,点击其中一个需要访问网络中的地址比如http://www.somesite.com,点击第二个按钮需要访问本地的一个页面,比如local.html,而a.swf是内嵌到页面index.html中的,需要在本地访问,而不是放置在服务器上。这时就出现了问题,因为SWF文件要么发布成只访问本地文件,要么是只访问网络,但是任何一项都不能满足既能点开http://www.somesite.com,又能点开local.html。

最开始我想使用localConnection来实现。就是再新建一个SWF,为b.swf,让它发布成只访问网络,而a.swf通过localConnection调用b,让b实现访问。结果发现当两个安全设置不一样时,无法使用localConnection。只能放弃这种想法。

最后借助页面的自动跳转来实现。a.swf仍旧发布成只访问本地,访问http://www.somesite.com改成访问本地文件somesite.html,在somesite.html中设置自动转向http://www.somesite.com
转向的方法有2种,一种是利用javascript的window.location=”http://www.somesite.com”,这种方法在IE7中会有警告提示,另一种方法是利用meta标签的refresh来设置:

<meta http-equiv="refresh" content="5; url=http://www.somesite.com/" />

Flash ColorPicker的例子

星期五, 5月 23rd, 2008


这个例子中,可以选取整个SWF屏幕内的颜色,可以按Esc键关闭取色

[as2]Flash中退出按钮代码的写法

星期六, 2月 2nd, 2008

AS2SWF中设置退出按钮的目的是当用户用鼠标点击的时候退出,但是播放SWF的环境并不一样,为了能达到同样的效果,当点击退出时,执行如下代码:
AS Code

switch (System.capabilities.playerType.toLowerCase ())
{
case "standalone" :
	fscommand ("quit"true);
	break;
case "external" :
	flash.external.ExternalInterface.call ("sendQuit");
	break;
case "plugin" :
case "activex" :
	flash.external.ExternalInterface.call ("window.close()");
	break;
}

就是根据播放器的类型来分别处理。
需要注意的是:
1、当在网页中播放时,需要在服务器上查看网页或者添加到信任区域才能有效,否则会弹出安全警告。
2、当包含在其他程序中时,需要处理退出消息sendQuit.

[as2]AS2中不支持../

星期六, 2月 2nd, 2008

AS2在使用loadMovieNum加载文件时,有时需要相对路径来写,比如用到../指向当前文件的上一级,当在Flash创作环境下测试的时候是有效的,但是离开这个环境就无效了。为此,我们用处理一下这个路径:
AS Code

// 以下是从Command命令中添加的代码
// ++++++++++++++++++++++ 加载替代函数 ++++++++++++++++++++++++
// @param		str:String 加载的文件名
// @param		depth:Number 加载的深度
// @return		Void
function loadFile (str:String, depth:Number):Void
{
	depth == undefined ? depth = 0 : null;
	var _URI:String = this._url;
	var catalog:String = _URI.substr (0, _URI.lastIndexOf ("/"));
	while (str.substr (0, 3) == "../")
	{
		str = str.substr (3);
		catalog = catalog.substr (0, catalog.lastIndexOf ("/"));
	}
	catalog += "/";
	if (true == _global.loader)
	{
		this._parent.loadSWF (catalog + str);
	}
	else
	{
		loadMovieNum (catalog + str, depth);
	}
}

使用如下代码测试
AS Code

loadFile("../../d.swf")
loadFile("../d.swf")
loadFile("d.swf")

输出如下信息
Error opening URL "file:///C|/DOCUME%7E1/s520/d.swf"
Error opening URL "file:///C|/DOCUME%7E1/s520/LOCALS%7E1/d.swf"
Error opening URL "file:///C|/DOCUME%7E1/s520/LOCALS%7E1/Temp/d.swf"

说明这个函数是有效的。

[as2]BitmapData画流畅的线

星期一, 1月 7th, 2008

AS2当使用AS模拟画笔绘画时,可以使用MovieClip的moveTo和lineTo方法。如果需要橡皮擦的功能,那么可以把线的颜色设置成和底板一样,达到假橡皮擦的效果。但是如果要在给定的底纹基础上实现画笔添加花边、任意绘制时,橡皮只能擦掉绘制的颜色,不能覆盖底纹时,使用这个方法就不合适了。要想真正的擦掉绘制的线条,要借助BitmapData类。通过把橡皮擦经过的区域通过设置透明的方法,就可以达到效果。但是,模拟画笔又不太方便了,因为如果使用setPixel或setPixel32设置鼠标划过的点时总会出现断断续续,线条非常的不流畅。要画出流畅的线条,就需要再借助MovieClip的moveTo和lineTo方法。首先我们在一个MC上使用moveTo和lineTo画出流畅的线来,然后使用BitmapData的draw方法把效果拷贝到BitmapData中,这样看起来就是非常流畅的线条了。

[as2]一个利用A*寻路算法的例子

星期一, 12月 24th, 2007

AS2


规则:
1、轮流拖动棋子到任意方格中
2、白子的目的是从左侧到右侧形成一条通路,黑子的目的是从下至上形成一条通路。先形成通路的赢。
3、白子黑子都由人控制。
这里使用A*寻路算法只是判断是否已经赢了。