刻录时光

时光飞逝,莫让网络蹉跎了岁月

设置 wmode 后 Firefox 中有时按钮失灵

2009年十月24日

我的博客中至少记录了2篇关于设置 wmode 后 Firefox 中 flash 有问题的文章,这次又发现了一个,当页面长度超过1屏,点击 flash 区域让 flash 获得焦点,然后滚动页面,如果不再次点击 flash 区域,按钮的 mouseOver 事件就不响应,去掉 wmode 后就没问题了,并且用 swfobject2.2 嵌入 flash 后也没有 flash 边缘恼人的虚线了。所以如果没有必绝对不要用 wmode。

中文输入法下 keyCode 始终等于 229

2009年六月2日

Flash(AS3)中在接收键盘响应时如果输入法是中文,所有 keyCode 都等于 229,解决办法就是将 IME.enabled 设为 false 或者 IME.conversionMode 设为 IMEConversionMode.ALPHANUMERIC_HALF

FULL_SCREEN 事件时同时“按下”空格键

2009年五月31日

Flash Player 跨浏览的 BUG,AS3 触发 FULL_SCREEN 事件后同时帮我按下了空格键!网上找到一篇文章也是描述这个问题 http://blog.circlecube.com/2009/03/tutorial/as3-firefox-bug-enter-fullscreen-broadcasts-keyboard-events/

让人发指的 wmode=transparent

2009年五月19日

今天在 Flash 里 call js 中加入收藏的功能,js 函数包括针对 IE 的 window.external.AddFavorite() 方法,点击测试死活没反应,可是 alert() 却能蹦出来,郁闷了半小时发现去掉 wmode=transparent 就可以了,wmode 这个参数从 Macromedia 时代就是一个让人又爱又恨的功能,wmode=transparent 的陷阱至少在 IE 和 FF 中都遇到过,不小心进去半天都出不来。

设置 wmode 后 Firefox 中鼠标滚轮失效

2009年三月30日

flash 在 Firefox 中如果 wmode 设置为 opaque 或者 transparent 后 TextField 的 SCROLL 事件不响应,其它 mouseWheel 事件也应该不能用,FP for Firefox 的 bug。

涂鸦 UI 组件基本完成

2009年三月30日

涂鸦板中用到的 Button、ToolTip、CheckBox、Label、Slider、ScrollView、TextInput、TextArea、Alert、ColorMixer 已经完成,是在 sdevil 组件基础上改进而来的,精简优化了代码,功能和交互上有些变动,可以在时间轴中布局,虽然比 CS3 组件的用法原始很多,另外还可以在纯 AS3 项目中使用,比如 FDT 和 FlexBuilder 中用 FCSH 编译,外部创建的 skin 在编译时 Embed 到 SWF 中去。

overState.cacheAsBitmap 的问题

2009年三月22日

SimpleButton 的 overState 设置了滤镜效果后鼠标移到 button 上然后改变舞台大小,鼠标再回到 button 上就不显示 overState 了,实际上只要是 overState 的 cacheAsBitmap=true 都有这个问题,可能是 FP 的 BUG,暂时不知道如何解决,先记录下来。

Flash CS4

2008年九月25日

啥也不说,“来路不明”的图片一张。工作区域更大了,很喜欢。

不规则形状的 Bitmap Mask

2007年九月16日

最近做的项目中有需要动态创建不规则图形 Mask,绘制的矢量图形 Mask 会占用大量 CPU 资源。以前以为用位图做 Mask 只能是矩形的,昨天发现把 Mask 和被 Mask 图形的 cacheAsBitmap 属性设置 true 就可以了,前提是遮罩和被遮罩的物件都是 Sprite 或者 MovieClip,不能直接用 Bitmap。下面是 AS3 的例子,AS2 同样支持。

import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BitmapDataChannel;
import flash.geom.Point;
import flash.geom.Rectangle;
 
var bmd:BitmapData = new BitmapData(200, 200, true, 0xFFFF0000);
var bmdMask:BitmapData = new BitmapData(200, 200, true);
var seed:int = int(Math.random() * int.MAX_VALUE);
var channels:uint = BitmapDataChannel.RED | BitmapDataChannel.BLUE;
bmdMask.perlinNoise(100, 80, 12, seed, false, true, channels, false, null);
var bitmap:Bitmap = new Bitmap(bmd);
var bitmapMask:Bitmap = new Bitmap(bmdMask);
addChild(bitmap);
addChild(bitmapMask);
var threshold:uint = 0×00800000;
var color:uint = 0×00FFFFFF;
var maskColor:uint = 0×00FF0000;
bmdMask.threshold(bmdMask, bmdMask.rect, new Point(), ">", threshold, color, maskColor, true);
var spriteMask = new Sprite();
spriteMask.addChild(bitmapMask);
spriteMask.cacheAsBitmap = true;
this.addChild(spriteMask);
 
var display = new Sprite();
display.addChild(bitmap);
display.cacheAsBitmap = true;
addChild(display);
display.mask = spriteMask;

Server-side GIF 转 SWF

2007年八月1日

最近在做的项目需要在服务器端将 GIF 动画转换成 SWF,服务器端程序是 PHP,思路有两个:
1. 使用 Swftools 的 GIF2SWF 进行转换。优点:command-line方式简单、速度快;缺点:目前版本的 GIF2SWF 对于某些类型的 GIF 动画转换不准确,有帧重叠和色彩丢失的问题,并且不能设置导出的 SWF 版本。
2. 使用服务器端 GIF 动画解析器先进行分割,比如:Gifsicle(Gifsicle 网站上的命令有问题,导出单帧图片应该这样 % gifsicle anim.gif #0 > firstframe.gif)、ImageMagick(MagickWand)或者 PHP GIFDecoder,然后再用 PHP Ming 生成 SWF。优点:可以提取 GIF 的单帧图片;缺点:GIF 类型很多,需要先进行类型判断,再根据不同类型进行处理,过程很麻烦,再加上 Decoder 问题多多,拆解的单帧图片会有各种问题。

两种方法都试了,最后放弃第二种,因为 Swftools 是开源的,所以决定修改 GIF2SWF 代码来解决,在 Linux 下编译 Swftools 代码很方便,只用了半天时间就解决了上面的问题,通过简单的设置后竟然可以支持导出 SWF9!这样 AS3 就可以和载入的 SWF 交互了。

归档