在JavaScript应用中使用Flash来存储本地数据

最近在Google Reader里面看到的,一日本人在blog上提出来的,他还有一个示例页面,这里是Demo下载地址。不过在看到这篇文章之前,我就已经在我们的项目(PPLive iKan 1.0)中用过了,其中的观看历史记录就是使用的Flash来进行存取的。

其实Flash在JavaScript应用程序中当“幕后英雄”的例子早就有过了,最先是为了解决用JavaScript复制文本的问题,用Flash这可以轻而易举地解决跨浏览器问题。我之所以想到用Flash来存储观看记录是因为我觉得用Flash来保存更有优势:

  • 存储方式可靠

JavaScript中存储本地数据的常见方式是使用Cookie,还一种方式是使用UserData。写Cookie的方式也很可靠,读写都非常的容易,但是UserData有时候却不是那么可靠,不知道为什么有时候清理Cookie都会带来莫名奇妙的问题,造成UserData无法写入或者无法读取的情况,很诡异。…

Flash中怎样实现这样的伪3D形变咧?

以为Transform可以做到的,结果仔细翻了一下文档,貌似怎么组合也不能做到这样子……Silverlight里也是这个鬼样子,只支持2D的矩阵变换……

具体就是这样的,我只能用AS画这样的形变,可以算出来,但是怎么让MC或者BitMap实现这样的变换咧?使用Mask?效果不好又浪费CPU……

Who can tell me?…

Flash或者Silverlight来实现P2P靠谱不?

好久没写blog了,被奥运折腾得不行,天天盼着奥运结束,终于快结束了,来blog除除草,简单地说说Flash、Silverlight和P2P吧。

Flash Player 10出来很久了,号称支持P2P,而且支持UDP,想那个时候当我听到UDP的时候,我是多么的兴奋啊!后来翻翻相关文档一看,却是有些失望。Flash Player 10确实支持一些P2P特性,但是局限性太多太多了,仅仅只是支持“End User”到“End User”的通讯,不支持大文件(分片)传输,不支持多播(多点传送,Multicast),这样在P2P应用方面就非常有限了。

唯一的希望就是Flash Player的UDP协议支持情况了,如果比较开发,使用起来能够比较自由的话,还可以在这个上面打点主意。要是仅仅只是在RTMFP协议中使用的话,这个UDP也就没有什么好玩的了。

Silverlight从出来的时候就号称很强大,到现在的2.0…

OOPlayer Beta更新

OOPlayer Beta更新至1.0.2了,版本改动如下:

  • 增加高清FLV、MP4、M4A格式文件支持;
  • 使用新的硬件加速全屏模式;
  • 增加多语言切换;
  • 增加按钮提示(ToolTips)功能;
  • 增加自动播放功能设置;
  • 修改播放控制栏自动隐藏动画效果;
  • 修改OOPlayer.js,添加language参数
  • 去掉控制栏缩放功能,保持大小不变;

继续征集多语言版本中……需要翻译的东西如下:

中文(Chinese)、播放(playing)、暂停(Paused)、停止(Stopped)、缓冲(Buffering)、未找到(Not Found)、不支持(Invalid File)、停止(Stop)、播放(Play)、暂停(Pause)、静音(Mute On)、恢复音量(Mute Off)、全屏(FullScreen)、普通模式(Normal Mode)、关于OOPlayer(About OOPlayer)、音量(Volume)、时间(Time)、语言(Language)

Flash CS 3的两个BUG?

首先是格式化脚本的一个bug,会去掉部分表达式中的括号。本来写得好好的没有任何问题,改来该去后为了代码好看,格式化了一下代码,结果发现结果不正常了,仔细检查了一下代码,发现是格式化后改变了我的正确代码。

正确代码是这样的:

controler.x = (w – controler.width) / 2;

格式化后成这样了:

controler.x=w – controler.width / 2;

这样不出错才怪……

第二个是关于右键菜单的,在Video对象上点击右键不会触发相关事件。具体是这样的,我有一个Player类,继承自MovieClip,在这个类里面我是直接new了一个video,然后直接this.addChild(video),在播放时发现在视频上点右键菜单并不会触发相应的右键菜单事件,而在其他MC上可以触发。…

AS3:双击及手形鼠标指针

以前在AS2中,只要为MC指定onRelease或者onRollOver等等点击事件,当鼠标移到MC上时,鼠标就变成手形了,完全不用管。在AS3中改变了这一规则,你首先得用addEventListener添加事件,添加完事件之后,鼠标移到MC上依然是默认的箭头形状。要改变这个形状,还需要指定MC的buttonMode属性为true:

myMC.buttonMode = true;

AS3中支持双击事件,不过要启用这个双击事件就得指定另外一个属性——doubleClickEnabled为true:

myMC.doubleClickEnabled = true;

不过,需要注意的是,如果你这个MC同时有单击事件和双击事件那么在双击的第一下会触发单击事件,而第二下则不回触发单击事件~…

FLV播放器——OOPlayer Alpha测试

用AS3写了一个FLV播放器,花了我一天半时间,功能几本上都全了,不过还有许多细节没有做,慢慢改,先拿一个试试~
梁静茹的《可惜不是你》,来自酷六网^_^

AS3:onLastSecond or onPlayStatus?

检测FLV是否播放完成,在Flash CS3的帮助文档中有onPlayStatus的说明,其返回的信息对象可能的值有两个,一个是 NetStream.Play.Switch,还一个是NetStream.Play.Complete。结果在client的事件中写上onPlayStatus,发现在编辑器中这个事件名称居然还是黑色,而不是和onMetaData一样的蓝色!如果此时加上trace(info.code),在FLV播放完成后还会报错,错误信息中冒出来一个onLastSecond。在帮助文档中查了一下这个事件,居然没有任何介绍。

既然onPlayStatus不管用,不妨试试onLastSecond,这个事件名称还是黑色,写上trace(info.code),结果FLV播放完成之后trace出来一个undefined,看来NetStream中还真有这个事件,但是为什么文档中没有任何介绍呢?

不管怎样,总算还能用onLastSecond检测FLV播放完成,不过这应该不是什么好方法………

AS3中有趣的event.localX属性


在上面的这个图片中,现在那个绿色的矩形(绿线)长度为250,这条绿色的线是一个MovieClip,若其原长度为250,那么用event.localX获得的值将在0到250之间;但是如果其原长度为400,那么用event.localX获得的值将会在0到400之间,而与该MC在影片中的实际长度无关。

不过这样也还好,获取事件触发的x坐标占这个MC长度的百分比依然很简单,直接用除以MC的原长度就行了。…

AS3控制FLV的音量方法(不用组件)

在AS3中,NetStream类有这样一个属性:soundTransform,可以用来控制FLV的声音,其实现为:

实现
public function get soundTransform():SoundTransform
public function set soundTransform(value:SoundTransform):void

SoundTransform类又有个volume属性,于是想是不是直接这样写就行了:

var volumeSize:Number = 0.2;
ns.soundTransform.volume = volumeSize;

结果丫的没任何反应……莫非必须重新为ns指定一个soundTransform对象?于是改成这样:

var volumeSize:Number = 0.2;
var st:SoundTransform = new SoundTransform(volumeSize,0);
ns.soundTransform