《鸿门宴》的改编比较大胆,有新意。历史的真相只有一个,但猜测却又无限多种,让我们以阴谋论的眼光来看看这段传奇:
为什么让刘邦送虞姬?
项羽这个英雄确实没能过虞姬这个美人关。每天的枕边风让项羽自信心极度膨胀。范增看在眼里急在心里,自己从小培养大的苗子眼看就要闪着腰了,能不急么。但现在自己跟项羽谈工作交心的时间不足2小时/每天,哪抵得上虞姬白天5个小时,晚上4个小时的迷魂汤管用。范增知道“先入咸阳者封秦王”是楚怀王的离间计。但如果能借这个机会干掉虞姬,倒也不错。于是他让项羽安排刘邦来送虞姬。
范增早就看出虞姬是个祸害,不是美女间谍也是红颜祸水,所以借这个机会想打发掉虞姬。他预计如果虞姬不是间谍,那么这一趟孤男寡女,熟饭改成稀粥。让占了便宜的刘邦不好意思再去抢被自己扣了绿帽子兄弟的生意。如果虞姬是间谍,那么刘邦有可能假借送嫂子这个机会去抢咸阳。到时候让发怒的项羽灭了咸阳城,到时候用计在兵荒马乱中把虞姬快递到阴曹地府,既除掉了刘邦,又得了个耳根子清静。
范增的idea看似是一个地税不漏的计策。没想到的是冒出个抢饭碗的张良,所以后来他自己也感慨,敌人就像一面镜子,总能在对面找到个跟自己面对面较量的。张良让百姓上城墙,如果杀进去就等于屠城,落得个秦始皇二世的绰号的话,必然失了人心。后面才有了将计就计的鸿门宴。
虞姬到底是干嘛的?
刘邦出身平民,想与项羽攀上关系。于是挖掘了个歌女,安排了一出英雄救美+英雄救英雄的好戏。刘邦这招一方面可以拉近与项羽的关系,另一方面从长远看有希望让项羽爱江山更爱美人,成为为自己垫背的。
另一种可能是秦朝的人,他那儿部门庞大,挑出一个虞姬,集训一下再安排给项羽,干干无间道的工作。
最善良的一种猜测是,是一绝色美女,EQ高到侧漏,IQ低到秀逗。不用任何计策就把项羽迷得晕晕乎乎。
范增是怎么死的?
史书记载是被离间后再回乡路上病死的,但我觉得很可能是被张良派人杀的。而锦囊,我觉得是不存在的。
在Flash中作视觉表现时,常常需要创建MovieClip的子类。下面是一个不错的框架:
Avatar子类:
class cn.adamstudio.Avatar extends MovieClip
{
//定义静态变量,用于初始化
public static var HAPPY:Number = 0;
public static var SAD:Number = 1;
public static var IDLE:Number = 2;
//定义静态方法,用于简洁地创建自己的instance
public static function createAvatar(name:String, target:MovieClip, depth:Number, x:Number, y:Number):Avatar
{
var av:Avatar = Avatar(target.attachMovie(“AvatarSymbol”, name, depth));
av.init(x,y);
return av;
}
//设置instance的坐标
public function init(x:Number, y:Number):Void
{
setState(Avatar.HAPPY);
this._x = x;
this._y = y;
}
//初始化instance
public function setState(newState:Number):Void
{
switch (newState) {
case Avatar.HAPPY :
this.gotoAndStop(“HAPPY”);
break;
case Avatar.SAD :
this.gotoAndStop(“SAD”);
break;
case Avatar.IDLE :
this.gotoAndStop(“IDLE”);
break;
}
}
}
注:其中的静态变量和静态函数是可选的,可以根据需求的不同而有所变化。
主文档中:
import cn.adamstudio.Avatar;
var av:Avatar=Avatar.createAvatar("avatar",_root,0,200,200);
这种方法的特点和优点是用使用子类的静态方法来实例化MovieClip的子类,在主文档中非常简洁。
源文件下载
[kml_flashembed movie="http://www.adamstudio.cn/blog/wp-content/uploads/2008/03/XMLObject.swf" height="300" width="500" /]
在AS2中调用XML文档不如在AS3当中方便。还好有热心人写了个XMLBuildObj,使得我们可以在AS2当中用我们熟悉的”.”语法来调用XML中的内容,其语法是:
#include "XMLbuildObj.as"
var myXML = new XML();
myXML.load("data.xml");
myXMLObject = myXML.buildObject();
值得注意的是,只有XML文档完全加载之后才能转换为XMLObject,所以需要对加载进行判断:
//-----------------------
#include "XMLbuildObj.as"
//-----------------------
_root.myXML = new XML();
if(_root.XMLPath != null){
_root.myXML.load(_root.XMLPath);
}else{
_root.myXML.load("content.xml");
}
_root.myXML.onLoad = function(success){
if (success){
_root.myXMLObj = _root.myXML.buildObject();
loadingXML = true;
}
}this.onEnterFrame = function(){
part = this.getBytesLoaded();
total = this.getBytesTotal();
if (part == total && loadingXML == true && total != 0) {
delete this.onEnterFrame;
init();
_root.play();
}
}
function init(){
motion1_mc.copy_mc.text_txt.text= _root.myXMLObj.content.teaser.startline;
motion2_mc.copy_mc.text_txt.text= _root.myXMLObj.content.teaser.headline;
motion3_mc.copy_mc.text_txt.text= _root.myXMLObj.content.teaser.subheadline;
motion4_mc.copy_mc.text_txt.text= _root.myXMLObj.content.teaser.copytext;
motion5_mc.copy_mc.text_txt.text= _root.myXMLObj.content.teaser.linkText2;
}
stop();
核心文件下载:
XMLbuildObj下载
经过长时间的努力,终于用Flash CS3+AS3+AIR Beta2做出了RSSReader 2.0。
前一段时间用html+JS做了个WordpressReader, 虽然实现了自动升级,等很cool的功能,但界面还是比较简朴。
AIR读取Blog RSS – Adobe AIR Beta2 实践
WordPressReader 1.1 完成
这次做的RSSReader是基于ActionScript3的,界面漂亮了很多,而且用户体验也有了显著的提高。
程序下载:http://www.adamstudio.cn/blog/download/RSSReader.air
初始介面:

文章阅读界面:

实现的功能:
1 读取服务器端XML文档;
2 将读取的XML文档储存到AIR的内建本地数据库SQLite !!!(太酷了!)
3 判断网络连接状况,如果网络畅通就读取并以动画的形式展示文章标题,同时用最新文章刷新SQLite中已有文章。如果网络不通,则读取并显示SQLite中储存的文章;
4 以动画形式展示动画文章标题;
5 自定义事件和文章标题与文章内容之间的切换。
多说也无用,试用一下你就知道Adobe AIR有多强了!
程序下载:http://www.adamstudio.cn/blog/download/RSSReader.air