
问题: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来设置:
<metahttp-equiv="refresh"content="5; url=http://www.somesite.com/"/>
这个例子中,可以选取整个SWF屏幕内的颜色,可以按Esc键关闭取色
SWF中设置退出按钮的目的是当用户用鼠标点击的时候退出,但是播放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.
在使用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"
说明这个函数是有效的。
当使用AS模拟画笔绘画时,可以使用MovieClip的moveTo和lineTo方法。如果需要橡皮擦的功能,那么可以把线的颜色设置成和底板一样,达到假橡皮擦的效果。但是如果要在给定的底纹基础上实现画笔添加花边、任意绘制时,橡皮只能擦掉绘制的颜色,不能覆盖底纹时,使用这个方法就不合适了。要想真正的擦掉绘制的线条,要借助BitmapData类。通过把橡皮擦经过的区域通过设置透明的方法,就可以达到效果。但是,模拟画笔又不太方便了,因为如果使用setPixel或setPixel32设置鼠标划过的点时总会出现断断续续,线条非常的不流畅。要画出流畅的线条,就需要再借助MovieClip的moveTo和lineTo方法。首先我们在一个MC上使用moveTo和lineTo画出流畅的线来,然后使用BitmapData的draw方法把效果拷贝到BitmapData中,这样看起来就是非常流畅的线条了。
![]()
规则:
1、轮流拖动棋子到任意方格中
2、白子的目的是从左侧到右侧形成一条通路,黑子的目的是从下至上形成一条通路。先形成通路的赢。
3、白子黑子都由人控制。
这里使用A*寻路算法只是判断是否已经赢了。