AS3中实现多样化的A标签
首先说下想要实现的效果。在htmlText里有多个A标签,想要鼠标滑到不同的标签时,显示不同的颜色.很明显的使用html+css( styleSheel)比较方便。OK,既然是html+css,一开始我还觉得很是简单,因为AS3支持部分css的,但是当我真正去实现的时候才明白.好多事情并不是那么的想当然。 阅读全文...
首先说下想要实现的效果。在htmlText里有多个A标签,想要鼠标滑到不同的标签时,显示不同的颜色.很明显的使用html+css( styleSheel)比较方便。OK,既然是html+css,一开始我还觉得很是简单,因为AS3支持部分css的,但是当我真正去实现的时候才明白.好多事情并不是那么的想当然。 阅读全文...
以前写过一个数值文本NumberText,也就是只允许输入数值,而其他文本不允许被输入.NumberText当时是根据判断键盘事件来控制输入的,感觉有点傻,后来知道了TextField本身就有属性来限制输入的字符,就一直想重写下这个数值文本.今天终于有空重新写了个新的数值文本:NumTextField.
阅读全文...
Graphics.copyFrom 这个API是从flash player10开始有的,以前我们要复制一个显示对象,那是不可以的,当然你可以说用 BitmapData.draw 这个方法,但是原本是矢量对象,被draw之后就变成了位图.这样不是很好的.flashplayer10刚出来的时候有关注过一些新特性,但是对这个没有这么在意.
阅读全文...
都说C/C++的类型转换个很头疼的问题。我说AS3的类型转换也简单不了多少(后者相比前者肯定简单些,呵呵)。
当操作数的类型不同时,需要将一种类型转换为另一种类型,这就是类型转换。
类型转换分为显示类型转换和隐式类型转换两种。
阅读全文...
Flash Player 10.2添加了内置的本机鼠标指针(native mouse cursor)支持,虽然在之前的版本里我们可以侦听MouseEvent事件来模拟鼠标指针,但是在有了原生的本机鼠标指针后,我们可以舍弃旧的方式,迎接更友好,更方便的鼠标指针了.
下面对比下模拟鼠标指针和本机鼠标指针.
模拟鼠标指针:
本机鼠标指针:
新的本机鼠标的一些能力及限制:
下面看一个本机鼠标指针的示例:
英文原文: http://www.blog.elimak.com/2009/07/tutorial/
本文将讲述:
怎样安装Ant应用Ant编译你的AS3项目。
与此安装工作将允许你对你的代码编辑工作独立。
然后你可以用任意编辑器打开项目并编译,而不用Flash IDE 或者 Flex. 阅读全文...
之前只是知道尽量用强引用,不要用弱引用,因为弱引用会被垃圾回收. 对于flash.utils.Dictionary倒是没有什么疑问.但EventDispatcher.addEventListener就不明白具体是侦听器被回收了,还是侦听者被回收了。
昨天有看了一些文章,又想起这个问题,就想要理解透彻,于是又仔细看了下API文档.
Class-level member functions are not subject to garbage collection, so you can set useWeakReference to true for class-level member functions without subjecting them to garbage collection. If you set useWeakReference to true for a listener that is a nested inner function, the function will be garbge-collected and no longer persistent. If you create references to the inner function (save it in another variable) then it is not garbage-collected and stays persistent.
原来这里的弱引用是对侦听器的(侦听器函数),跟侦听者没有关系. 为了验证这个观点,我做了个小Demo。
OK,让我们来一边享受引用,一边学习吧。
阅读全文...
最开始发现是在AS2里用MovieClipLoader加载图片,那次地址写错了,但是依然有onLoadComplete事件触发。
请看下面的代码:
var mc:MovieClip = _root.createEmptyMovieClip("mc", 1);
var loader:MovieClipLoader = new MovieClipLoader();
var listener:Object = {};
loader.addListener(listener);
// 加载一个错误的图片地址,但只要有数据返回就会触发complete事件
loader.loadClip("http://www.litefeel.com/errorJpg.jpg", mc);
listener.onLoadComplete = function(target:MovieClip):Void
{
trace("this is loadComplete!");
}
OK,上面明明是一个错误的图片地址,竟然会触发onLoadComplete事件。
然后用浏览器打开这个错误的地址看了下,是一个404Error页面。又换了好多个地址,不同域名的,可是依然会触发onLoadComplete事件。
所以猜想可能是只要有数据返回就会触发onLoadComplete事件吧(onLoadInit也是一样)。
测试LoadVars后更加断定我的猜想,请看代码:
var loader:LoadVars = new LoadVars();
loader.onLoad = function (success:Boolean):Void
{
trace("success = " + success);
trace(loader);
}
// 请更改为非跨域的不存在的地址
loader.load("http://www.litefeel.com/fdsafdsa");
我想这可能是AS2的一个bug吧,不知道AS3里解决了没有。
测试后发现Loader不存在这样的问题了,但是URLLoader,URLStream依然会触发Event.COMPLETE事件。
或许这不是bug,可能Adobe设计的时候就是complete为数据接收完毕,不论是404页面还是原本的地址。
那么我怎么才能知道是我原本想请求的数据还是一个404呢。
可能在HTTPStatusEvent.HTTP_STATUS 这个事件里会给让我区分吧。
测试发现明明由一个不存在地址跳转到404页面,但flashplayer收到的httpStatusCode竟然是200,就是说flashplayer认为这不是错误的请求,是正常的。
请看这个demo:
输入一个随便输入一个网址,如果有跨域请更换地址,再看httpStatusCode和返回的data。
在Event.COMPLETE事件里获取到data数据的。
结果表明:Event.COMPLETE事件在完整数据返回后触发,而不管是404页面还是其他。
存在的问题:没有办法区别是否404页面。
再看官方帮助上对HTTPStatusEvent.HTTP_STATUS的解释。
Dispatched if a call to URLLoader.load() attempts to access data over HTTP. For content running in Flash Player, this event is only dispatched if the current Flash Player environment is able to detect and return the status code for the request. (Some browser environments may not be able to provide this information.) Note that the httpStatus event (if any) is sent before (and in addition to) any complete or error event.
OK,某些浏览器可能不能获取httpStatusCode,但是这个却返回了httpStatusCode:200。
感谢 12345 的回复.原来我之前博客的404页面是直接跳转,但是没有将状态码变成404,返回的依然是正常的状态码200,所以flashplayer认为这是一个正常的页面,而不是404,现在将状态码改成404了,这样flashplayer就返回IOError了,现在一切正常了