参考 https://www.cnblogs.com/Richard-Core/p/Sublime-ActionScript3.html
mxmlc在flexsdk的bin目录下
mxmlc Test.as =>Test.swf
标签: as3
as3文件操作
使用flash/flex进行air或手机应用的开发时,有时会需要对文件和文件夹进行操作,需要综合使用File,FileStream和FileMode类。
0.自定义目录:
var file:File = new File();
file.nativePath = “C://test//t.txt”;
1,写入到文件
var fileObj:File = File.documentsDirectory.resolvePath(“t.txt”);
var fs:FileStream = new FileStream();
fs.open(fileObj, FileMode.WRITE);
fs.writeUTFBytes(“hangge.com”);
fs.close();
2,更新文件内容
(1)下面例子在第5个字节开始覆写内容
var fileObj:File = File.documentsDirectory.resolvePath(“t.txt”);
var fs:FileStream = new FileStream();
fs.open(fileObj, FileMode.UPDATE);
fs.position = 5;
fs.writeUTFBytes(“.yuhang”);
fs.close();
(2)下面例子将内容添加到文件末尾
var fileObj:File = File.documentsDirectory.resolvePath(“t.txt”);
var fs:FileStream = new FileStream();
fs.open(fileObj, FileMode.APPEND);
fs.writeUTFBytes(“www.hangge.com”);
fs.close();
3,读取文件内容
var fileObj:File = File.documentsDirectory.resolvePath(“t.txt”);
var fs:FileStream = new FileStream();
fs.open(fileObj, FileMode.READ);
var str:String = fs.readUTFBytes(fs.bytesAvailable);
fs.close();
4,移动文件(重命名文件)
var originalFile:File = File.documentsDirectory.resolvePath(“t.txt”);
var newDir:File = File.applicationStorageDirectory.resolvePath(“t.txt”);
originalFile.moveTo(newDir);
5,复制文件
var originalFile:File = File.documentsDirectory.resolvePath(“t.txt”);
var newDir:File = File.applicationStorageDirectory.resolvePath(“t.txt”);
originalFile.copyTo(newDir);
6,删除文件
var fileObj:File = File.documentsDirectory.resolvePath(“t.txt”);
if(fileObj.exists){
fileObj.deleteFile();
}
7,创建文件夹
var fileDir:File = File.documentsDirectory.resolvePath(“t”);
fileDir.createDirectory();
8,移动文件夹
var originalDir:File = File.documentsDirectory.resolvePath(“t”);
var newDir:File = File.applicationStorageDirectory.resolvePath(“t”);
originalDir.moveTo(newDir);
9,复制文件夹
var originalDir:File = File.documentsDirectory.resolvePath(“t”);
var newDir:File = File.applicationStorageDirectory.resolvePath(“t”);
originalDir.copyTo(newDir);
10,删除文件夹
var fileDir:File = File.documentsDirectory.resolvePath(“t”);
if(fileDir.exists){
fileDir.deleteDirectory();
}
参考资料:
http://www.hangge.com/blog/cache/detail_502.html
https://blog.csdn.net/zdingxin/article/details/6635376
密码保护:as3+php上传图片和复制粘贴
As3文本密码及限制输入
pwd.displayAsPassword=true;
my_txt.restrict = “A-Z 0-9”;//仅允许在文本字段中输入大写字符、空格和数字
my_txt.restrict = “^a-z”;//包含除小写字母之外的所有字符
my_txt.restrict = “\\-\\^”;//以使用反斜杠输入 ^ 或 – 的本义。 认可的反斜杠序列为 \-、\^ 或 \\。 反斜杠在字符串中必须是一个本义字符,因此在 ActionScript 中指定时必须使用两个反斜杠。 这段代码只包含短划线 (-) 和尖号 (^)
my_txt.restrict = “A-Z^Q”;//可在字符串中的任何地方使用 ^,以在包含字符与排除字符之间进行切换。 这段代码只包含除大写字母 Q 之外的大写字母
my_txt.restrict = ” -~”;//只包含从 ASCII 32(空格)到 ASCII 126(代字号)之间的字符
my_txt.restrict = “a-zA-Z\u4e00-\u9fa5″,这样是代表只能够输入大小写的英文字母和中文
As3与jsp交互
//test.jsp
<%@page import="javaBean.simpleBean"%>
<%
out.clear(); //避免出现多余html代码
request.setCharacterEncoding("UTF-8"); //避免中文乱码
response.setCharacterEncoding("UTF-8");
simpleBean a=new simpleBean();
out.println(a.returnName("1234"));
%>
~~~~~~~~~~~~~~~~~~~~~~
//simpleBean.java
package javaBean;
public class simpleBean {
public String returnName(String name)
{
if(name.equals(“”))
{
return “&data=hello guest”;
}else{
return “&data=hello”+name;
}
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~
//as3 code LoginPage.as关联到fla中,定义了一个btn和txt
package
{
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
import flash.system.System;
/**
* …
* @author amyblog.ml
*/
public class LoginPage extends Sprite
{
public function LoginPage()
{
super();
main();
}
private function main():void
{
System.useCodePage=true;
btn.addEventListener(MouseEvent.CLICK,loadMss);
}
private function loadMss(e:MouseEvent):void
{
var postLoader:URLLoader=new URLLoader();
var request:URLRequest=new URLRequest();
var vars:URLVariables=new URLVariables();
vars.s1=”flash”;
vars.s2=”flex”;
request.url=”http://https://https://cfzy.site:8080/myproject/test.jsp”;
request.method=URLRequestMethod.POST;
request.data=vars;//这里的data可以是一个Object,或者Array
postLoader.load(request);
postLoader.addEventListener(Event.COMPLETE,completeFun);
}
private function completeFun(e:Event):void
{
txt.text = “test:” + (e.currentTarget as URLLoader).data;
trace(e.target.data);
//trace((e.currentTarget as URLLoader).data);
}
}
}
JavaScript 与 ActionScript 3.0 交互的一些问题
原文地址:http://www.coolcode.cn/show-291-1.html
这两天做基于 Flash9(ActionScript 3.0)的 JavaScript PHPRPC 3.0 客户端时遇到了一些 JavaScript 与 ActionScript 3.0 交互的一些问题,这些问题在网上基本上都没有找到答案,最后通过不断的尝试才得以解决,因此在这里总结出来,希望能给遇到同样问题的同志们一些帮助。
JavaScript 跟 ActionScript 3.0 交互也是通过 flash.external.ExternalInterface 这个类,不过与跟 Flash 8 中跟 ActionScript 2.0 交互所使用的 flash.external.ExternalInterface 还是有所不同的。最大的不同就是 ExternalInterface.addCallback 方法在 ActionScript 3.0 中只有 2 个参数了,而不再有 instance 这个参数。下面要讨论的这些问题都是关于 Flash 9 中 ActionScript 3.0 的。
先来说最常遇到的问题,就是在 JavaScript 调用 Flash 中的 ActionScript 方法时报告该方法不存在。这个问题是跟 Flash 中执行 ExternalInterface.addCallback 的时间有关的,ExternalInterface.addCallback 必须要在 HTML 的完全载入之后也就是 window.onload 事件执行后才可以执行,否则,它所发布的方法都无法在 JavaScript 中调用。
解决这个问题的方法在 Flash 9 的 ActionScript 3.0 帮助中有个例子,里面包含了这个解决方法,就是首先在 js 中设置两个标志,例如 jsReady 和 swfReady 这两个变量作为标志,开始都设置为 false,当 window.onload 时,设置 jsReady 为 true,在 Flash 中一开始检查 JavaScript 中的这个 jsReady 标志是否是 true(通过 ExternalInterface.call 方法调用 JavaScript 中的返回这个标志的一个函数),如果不为 true,就设置一个定时器,经过一段时间后(例如 50 或 100 毫秒)重复这个检查这个标志,一旦为 true,则执行 ExternalInterface.addCallback 来发布 ActionScript 要提供给 JavaScript 调用的函数或方法,执行完所有的 ExternalInterface.addCallback 后,通过 ExternalInterface.call 方法调用 JavaScript 中的设置 swfReady 标志的函数设置 swfReady 为 true。之后,当 JavaScript 检测到 swfReady 为 true 后,再调用 ActionScript 中的方法就不会遇到上的说的这个问题了。
如果简单一点的调用这样还可以,如果是有好多这样的调用就比较麻烦了。我是通过建立两个执行队列:jsTaskQueue 和 swfTaskQueue,当在 jsReady 为 true 之前,如果有要调用 ActionScript 的操作,就把这个操作放到 jsTaskQueue 中,当 js 在 window.onload 中执行设置 jsReady 时,把这个队列中的任务取出来执行,当 jsReady 为 true 后 swfReady 为 true 之前,如果有要调用 ActionScript 的操作,就把这个操作放到 swfTaskQueue 中,当 ActionScript 通过 ExternalInterface.call 方法调用 JavaScript 中的设置 swfReady 标志的函数设置 swfReady 为 true 时,把这个队列中的任务取出来执行。当 jsReady 和 swfReady 都为 true 时,那么如果有要调用 ActionScript 的操作,直接运行就可以了。通过这种方法把这些任务封装后,使用这些封装之后的操作,在编写代码就可以按照顺序(而不是异步)来写了,执行时也是顺序执行啦。
除了这个最常遇到的问题之外,还有两个关于 IE 上的问题。
如果你是通过 JavaScript 动态创建的 Flash 标签然后插入到 html 中的话(例如通过 innerHTML 赋值的方法或者 appendChild 的方法),很可能你这个操作是在 window.onload 之后才进行,在这种情况下,其它浏览器可以正常进行 JavaScript 和 ActionScript 3.0 的交互,IE 就不行。所以,为了保险,最好的方法就是直接把 flash 标签的 html 写在 html 的 body 中,或者用 JavaScript 的 document.write 来写入 html 的 body 中,后面这种方法对于 IE 来说更合适一些,因为这样的话,可以不需要点击激活 Flash。
另一个问题是,不要在 ActionScript 中发布名字为 invoke 的方法,否则在 IE 中,JavaScript 调用该方法时会出错。
最后一个问题,网上可以查到的比较多了,就是不要把 flash 放到 form 中,否则在 IE 中,JavaScript 调用 ActionScript 时会出错。当然,网上也给出了一个解决这个问题的脚本,不过那个貌似是针对 Flash 8 的 ActionScript 2.0 的,我没有试过,不知道对 ActionScript 3.0 是否同样有效。
11 月 23 日补充:
今天又发现一个问题,如果在 ActionScript 中通过 ExternalInterface.call 调用 JavaScript 时,如果传递的参数有字符串,那么字符串中如果包含 \ 符号的话,那么将会调用失败。这个也是 ActionScript 和 JavaScript 交互的一个 bug,解决办法是,对传递的字符串先进行一下处理在传递,处理方法很简单,比如要传递的数据是 data,将它进行一次 data.replace(/\\/, “\\\\”) 替换之后,在传递给 JavaScript 就可以了。
8.28号补充:
注意生成的swfobject的id是var attributes = {id:”uploadimg”};而不是embedswf里定义的id
9.1号补充:
div.hide()以后就调用不到flash的函数了,可以将flash设置成1*1大小
jquery的dom对象回调不到flash的函数,必须用document.getElementById的形式才可以调到
As3指定宽度截断文本
import flash.text.TextField; var w:Number=100; //指定宽度 var t:TextField = new TextField(); var s:String = "12345678901234567890"; t.text =s; addChild(t); t.x =100; t.y =100; getFinalTxt(w); function getChar(_str:String , _l:int):String { var _ba:ByteArray = new ByteArray ; _ba.writeMultiByte (_str, ""); if (_ba.length < _l) return _str; _ba.position = 0; return _ba.readMultiByte(_l-2, "")+"..."; } function getFinalTxt(len:Number):void { var i:int=s.length; while(t.textWidth>len) { t.text = getChar(s,--i); trace(t.text,t.textWidth); } t.width = w; } /*output 12345678901234567... 111 1234567890123456... 105 123456789012345... 99 */
关于as3替换字符串
//replace all var str:String="AAABBBCCCAAA"; str=str.split("AAA").join("DDD"); //结果str为:DDDBBBCCCDDD //replace first var str:String="AAABBBCCCAAA"; str=str.replace("AAA","DDD"); //结果str为:DDDBBBCCCAAA
As3渐变色填充工具
as3里退出函数
flash.system.fscommand(‘quit’);