2011-09-01
2011年的几部电影(1-8月)
倩女幽魂 (2011)
以为会是很难熬的一个半小时,也许是期望很低所以失望很小。小倩一副呆滞的表情。
加勒比海盗4:惊涛怪浪 Pirates of the Caribbean: On Stranger Tides (2011)
人物缩水,剧情也不丰满,唯一刻画的只有那个牧师。跟前几部,特别是第三部比起来差太远了。加勒比前三部的爱情与自由去了哪里。
功夫熊猫2 Kung Fu Panda 2 (2011)
如果说中国的文化只能被外国人表现的如此传神,真是一大悲哀。
再见我们的幼儿园 さよならぼくたちのようちえん (2011)
小孩子之间的勇气与约定,长大的我们是不是就不能简单的拥有了。
触不到的恋人 The Lake House (2006)
为爱去等待,即使他们从来没见过面。而我们为什么做不来呢。
变形金刚3 Transformers: Dark of the Moon (2011)
Michael还能不能骄傲的说,这一部比上一部更好。模型、爆炸场面比上一部多、精彩,但没有什么记忆点。
哈利·波特与死亡圣器(下) Harry Potter and the Deathly Hallows: Part 2 (2011)
能坚持拍好8部电影真的很不容易,直到影片的最后,每个人物任然丰满。上一部(上)有什么意义么?应该是为了不影响大结局的质量,特地割出来的吧。。
超级八 Super 8 (2011)
一群长相奇特的人。
赛车总动员2 Cars 2 (2011)
主角从麦昆变为板牙真是明智。
源代码 Source Code (2011)
如果你们只能相爱8分钟,你会勇敢的去爱吗。
窃听风云2 (2011)
讲诉了一个故事。最后那张支票还是成了没被使用的道具。
钢的琴 (2011)
父女之间的感情被很刻意的描写。最后那架钢琴只是为他自己造的。为了证明什么,不知道。
X战警:第一战 X-Men: First Class (2011)
一部分人逃避自我,一部分人表现自我,Erik就是两者的结合。
2011-08-28
AS3用于服务器通讯的类中几个很有用的方法
//使用的时候像这个样子
public function sync(xindex:Number,yindex:Number):void
{
addProcessor(IO_SYNC_URL, processorSync, DataEvent.SYNC_RESULT, DataEventError.SYNC_ERROR);
var params:Object = new Object();
params["xi"] = xindex;
params["yi"] = yindex;
executeRequest(IO_SYNC_URL, getRequest(IO_SYNC_URL, params, URLRequestMethod.GET));
}
//这个函数返回带参数的URLRequest
private function getRequest(url:String, params:Object, requestMethod:String="GET"):URLRequest
{
var req:URLRequest = new URLRequest();
req.url = IO_BASE_URL+url+makeGETParamString(params);
req.method = requestMethod;
trace(req.url);
return req;
}
//这里注册事件,以及响应函数;那个serviceLoader、loaderMap是这样定义的
//private var serviceLoader:Dictionary = new Dictionary();
//private var loaderMap:Dictionary = new Dictionary();
private function addProcessor(name:String, dataProcess:Function, resultEventType:String, errorEventType:String):void
{
if (null == serviceLoader[name])
{
var loader:URLLoader=new URLLoader();
loader.addEventListener(Event.COMPLETE, loader_onComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR, loader_onError);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_onSecurityError);
serviceLoader[name]=loader;
loaderMap[loader]={dataFunc: dataProcess, resultEvent: resultEventType, errorEvent: errorEventType};
}
}
//这里就load了
private function executeRequest(name:String, req:URLRequest):void
{
var urlLoader:URLLoader = serviceLoader[name] as URLLoader;
urlLoader.load(req);
}
//这里是一些响应函数,最后触发定义好的事件
private function loader_onComplete(event:Event):void
{
var loader:URLLoader=event.target as URLLoader;
var processor:Object=loaderMap[loader];
var data:String = loader.data as String;
if(data.toString()=="oauthlost"){
var req:URLRequest = new URLRequest(FLASH_URL);
navigateToURL(req,"_self");
/*var ioError:DataEventError = new DataEventError(processor.errorEvent);
ioError.message = "get map error";
dispatchEvent(ioError);*/
return;
}else{
var e:DataEvent = new DataEvent(processor.resultEvent);
e.result = processor.dataFunc(data);
dispatchEvent(e);
}
}
private function loader_onError(event:IOErrorEvent):void
{
var loader:URLLoader=event.target as URLLoader;
var processor:Object=loaderMap[loader];
var error:DataEventError=new DataEventError(processor.errorEvent);
error.message=event.text;
dispatchEvent(error);
}
private function loader_onSecurityError(event:SecurityErrorEvent):void
{
dispatchEvent(event);
}
private function makeGETParamString(parameters:Object):String
{
var paramStr:String=makeParamsToUrlString(parameters);
if (paramStr.length > 0)
{
paramStr="?" + paramStr + "&r=" + Math.random();
}else{
paramStr="?r=" + Math.random();
}
return paramStr;
}
private function makeParamsToUrlString(params:Object):String
{
var retParams:Array=[];
for (var param:String in params)
{
retParams.push(param + "=" + params[param].toString());
}
retParams.sort();
return retParams.join("&");
}
public function sync(xindex:Number,yindex:Number):void
{
addProcessor(IO_SYNC_URL, processorSync, DataEvent.SYNC_RESULT, DataEventError.SYNC_ERROR);
var params:Object = new Object();
params["xi"] = xindex;
params["yi"] = yindex;
executeRequest(IO_SYNC_URL, getRequest(IO_SYNC_URL, params, URLRequestMethod.GET));
}
//这个函数返回带参数的URLRequest
private function getRequest(url:String, params:Object, requestMethod:String="GET"):URLRequest
{
var req:URLRequest = new URLRequest();
req.url = IO_BASE_URL+url+makeGETParamString(params);
req.method = requestMethod;
trace(req.url);
return req;
}
//这里注册事件,以及响应函数;那个serviceLoader、loaderMap是这样定义的
//private var serviceLoader:Dictionary = new Dictionary();
//private var loaderMap:Dictionary = new Dictionary();
private function addProcessor(name:String, dataProcess:Function, resultEventType:String, errorEventType:String):void
{
if (null == serviceLoader[name])
{
var loader:URLLoader=new URLLoader();
loader.addEventListener(Event.COMPLETE, loader_onComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR, loader_onError);
loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_onSecurityError);
serviceLoader[name]=loader;
loaderMap[loader]={dataFunc: dataProcess, resultEvent: resultEventType, errorEvent: errorEventType};
}
}
//这里就load了
private function executeRequest(name:String, req:URLRequest):void
{
var urlLoader:URLLoader = serviceLoader[name] as URLLoader;
urlLoader.load(req);
}
//这里是一些响应函数,最后触发定义好的事件
private function loader_onComplete(event:Event):void
{
var loader:URLLoader=event.target as URLLoader;
var processor:Object=loaderMap[loader];
var data:String = loader.data as String;
if(data.toString()=="oauthlost"){
var req:URLRequest = new URLRequest(FLASH_URL);
navigateToURL(req,"_self");
/*var ioError:DataEventError = new DataEventError(processor.errorEvent);
ioError.message = "get map error";
dispatchEvent(ioError);*/
return;
}else{
var e:DataEvent = new DataEvent(processor.resultEvent);
e.result = processor.dataFunc(data);
dispatchEvent(e);
}
}
private function loader_onError(event:IOErrorEvent):void
{
var loader:URLLoader=event.target as URLLoader;
var processor:Object=loaderMap[loader];
var error:DataEventError=new DataEventError(processor.errorEvent);
error.message=event.text;
dispatchEvent(error);
}
private function loader_onSecurityError(event:SecurityErrorEvent):void
{
dispatchEvent(event);
}
private function makeGETParamString(parameters:Object):String
{
var paramStr:String=makeParamsToUrlString(parameters);
if (paramStr.length > 0)
{
paramStr="?" + paramStr + "&r=" + Math.random();
}else{
paramStr="?r=" + Math.random();
}
return paramStr;
}
private function makeParamsToUrlString(params:Object):String
{
var retParams:Array=[];
for (var param:String in params)
{
retParams.push(param + "=" + params[param].toString());
}
retParams.sort();
return retParams.join("&");
}
2011-08-21
2011-06-30
2011-03-28
CityVille——从喜欢到腻味
玩CityVille有一个多月了,作为Zynga倾力打造的模拟城市类社交游戏,确实有很多吸引我的地方。
这是个很容易上手的游戏。
玩过开心农场的人,对CityVille这样游戏就不会陌生。建设自己的家园,定期收取利益,访问朋友从朋友那获得利益。
熟悉的游戏操作方式不会给玩家设置不必要的门槛。并且它的指导教程也做得很好,那就是它的任务了。
无尽的任务。
CityVille总是有做不完的任务,它们就出现在你的左手边,看到它们挂在那心里总不是滋味,完成之后会有很大的满足感。这也是游戏不断吸引玩家,不断引导玩家熟悉游戏、提升兴趣的地方。
好友越多,你的城市会变得越美丽。
刚开始玩没几个好友,玩的很吃力。建个建筑要雇人,要么邀请好友,要么花钱完成指标。游戏鼓励你不断的邀请、添加好友,好友越多,建设城市的步伐会越快。好友能够帮你解决几乎所有的问题。不断的赠送礼物、不断的雇佣员工、帮助收取利益,游戏的互动性很强,难怪说这是病毒式的传播,更多的宣传、邀请工作都是玩家在做。
好友多起来了怎么办。
当我乐在其中的时候,就开始不断的添加好友。从CityVille的Page上寻找好友,如今已经有30多个,游戏确实比刚开始的时候有趣多了。每天回应着好友的请求,赠送好友礼物,帮他们解决困难,访问他们的城市获取利益和经验。
按理说很高的用户粘度。
好友和好友之间的互动保证了社交游戏有很高的用户粘度,他们会不断的提醒你,该回到游戏里去看看,你的菜还没收、我有需要你帮助的地方。这是跟大制作的网络游戏不一样的地方。
太黏了。
只是30个好友,我每次登陆facebook就有数十条需要处理的邀请,有一整个城市的金币要收取、货物要填充、扩展城市、发送新的邀请寻求好友帮助。完了之后还有30多个好友的城市需要去访问,赚取能量、金币和经验。一般情况下,还在处理自己城市的事物时,能量就已经不足了,所以访问好友成了必须进行的一项工作。
处理玩自己的事情了,好友还会有很多需求,你是否会一一关注到每一个人需要的是什么呢,一个痴迷的玩家可能会这样做,我也做过这样的事,因为那时觉得这样很好玩。
打开CityVille,想到的已经不只是游戏了。
当初在QQ上玩开心农场也出现这样的心理,厌倦了每天处理这么多的好友。这已经不是游戏的趣味性在引导你这样做,而是被游戏迫使,只有这样的途径才能玩好它。无论是否在游戏上花了钱,你还是有那么多的好友需要应付。玩家开始在接触游戏的一段时间后慢慢流失。
这一段时间对社交游戏来说是否足够。
像我这样的玩家是流失了,跟我同一时期开始游戏的也开始慢慢流失。当然,新的一批会补充进来。我的那些好友里,就有很多已经“坏死”的玩家,他们等级很高,但已经不再见他们上线,荒废的城市只是被后来的玩家用来赚取能量和经验,发送给他们的请求不再见有回复。
社交游戏的收益不是一次性获取,玩家越多,在线的时间越长,获取利益的机会就越大。而这种让人厌倦的游戏方式,是否能够改变呢。
2011-03-03
我也有梦中情人了
昨晚的梦好美呀:
同学让我帮他朋友领东西(水,还是。。牙膏?)。当我把东西交到她手上的时候,我就知道,我的梦中情人出现了。
第一次靠那么近,看着她,她好像有些害怕。应该是个很疯的女生,一下就不说话了,那种不知所措的样子可爱死了!
我们三个人(好像四个),逛了很多地方,她都跟在我的后面,恋爱指数不断升高~
我牵着她的时候,都是那么自然。她说,我们绕个道吧,让我们有些单独的时间。
我背着她,她抱我很紧。
哈哈,好吧,不是照片上那样。。都是没见过,不认识的人。。
同学让我帮他朋友领东西(水,还是。。牙膏?)。当我把东西交到她手上的时候,我就知道,我的梦中情人出现了。
第一次靠那么近,看着她,她好像有些害怕。应该是个很疯的女生,一下就不说话了,那种不知所措的样子可爱死了!
我们三个人(好像四个),逛了很多地方,她都跟在我的后面,恋爱指数不断升高~
我牵着她的时候,都是那么自然。她说,我们绕个道吧,让我们有些单独的时间。
我背着她,她抱我很紧。
哈哈,好吧,不是照片上那样。。都是没见过,不认识的人。。
2011-02-03
用户喜欢的产品
前段时间在新浪微博的开放平台上做了不少应用。其实不做不知道,只有自己动手去体验了这样的事情,才知道开发一个产品,并让用户使用起来不是一件原本想象的那么简单的事情。
一开始做minSip只是想能有一个自己用起来舒服的微博客户端,能在客户端中随意的加入自己喜欢的功能,界面越简约越好。如今minSip已经适合自己的使用习惯了,但几乎没什么人气,我想大部分人会对它的使用摸不着头脑吧。其实回去思考这样的问题,什么样的产品会是用户喜欢的。
第一次听到用户体验这个词,还是在大二的时候,在醉晚亭网站。为什么我们会习惯于QQ的客户端面板,就算是微博的客户端,也会想方设法向QQ的界面上靠呢?
有次东方集成的会议上,带着我们做项目的工程师跟我说:“你们给上海晶奥开发的组件连续性测试系统软件我看了半天没弄明白怎么使用。”他怎么也搞不明白如何才能进入测试主界面。
我跟他说,把配置界面关掉后,测试界面就会自动弹出来了。他连忙说,这不行这不行,我跟客户在现场一直不敢点关闭,关闭就应该是整个程序结束了才点的。然后他拿word来做比喻,菜单怎样怎样,点关闭后程序问你是不是保存,然后退出了。
我这时候才突然意识到,问题出在哪。
这件事的印象很深刻,在设计产品的时候,在开发一个没有人开发过的东西时,如何能让用户更容易上手,是需要考虑的。当初设计这款软件,想法是操作越简单越好,使用完不用的就直接关闭掉,需要的界面就会自动弹出,但却让用户没法下手。
为什么微软的软件界面会成为大家公认的界面呢,用户会想看到菜单,想看到关闭按钮。为什么QQ的界面就成为了沟通的界面呢,用户想看到消息的列表,听到新消息来时的滴滴声。有些体验更符合人们的使用习惯吧。
这些界面的设计者们,也在不断的改进他们的设计,提出更好的解决方案。这些改进让用户用起来更顺手,也不失习惯。
苹果在推出ipad时,会做大量的宣传告诉你什么是平板电脑,什么叫多点触摸,它除承接了苹果其他产品的特点外还有哪些新的用户体验。而Adobe推出cs套件时,不会再跟你介绍,我们的软件有菜单,如何打开和关闭。
一开始做minSip只是想能有一个自己用起来舒服的微博客户端,能在客户端中随意的加入自己喜欢的功能,界面越简约越好。如今minSip已经适合自己的使用习惯了,但几乎没什么人气,我想大部分人会对它的使用摸不着头脑吧。其实回去思考这样的问题,什么样的产品会是用户喜欢的。
第一次听到用户体验这个词,还是在大二的时候,在醉晚亭网站。为什么我们会习惯于QQ的客户端面板,就算是微博的客户端,也会想方设法向QQ的界面上靠呢?
有次东方集成的会议上,带着我们做项目的工程师跟我说:“你们给上海晶奥开发的组件连续性测试系统软件我看了半天没弄明白怎么使用。”他怎么也搞不明白如何才能进入测试主界面。
我跟他说,把配置界面关掉后,测试界面就会自动弹出来了。他连忙说,这不行这不行,我跟客户在现场一直不敢点关闭,关闭就应该是整个程序结束了才点的。然后他拿word来做比喻,菜单怎样怎样,点关闭后程序问你是不是保存,然后退出了。
我这时候才突然意识到,问题出在哪。
这件事的印象很深刻,在设计产品的时候,在开发一个没有人开发过的东西时,如何能让用户更容易上手,是需要考虑的。当初设计这款软件,想法是操作越简单越好,使用完不用的就直接关闭掉,需要的界面就会自动弹出,但却让用户没法下手。
为什么微软的软件界面会成为大家公认的界面呢,用户会想看到菜单,想看到关闭按钮。为什么QQ的界面就成为了沟通的界面呢,用户想看到消息的列表,听到新消息来时的滴滴声。有些体验更符合人们的使用习惯吧。
这些界面的设计者们,也在不断的改进他们的设计,提出更好的解决方案。这些改进让用户用起来更顺手,也不失习惯。
苹果在推出ipad时,会做大量的宣传告诉你什么是平板电脑,什么叫多点触摸,它除承接了苹果其他产品的特点外还有哪些新的用户体验。而Adobe推出cs套件时,不会再跟你介绍,我们的软件有菜单,如何打开和关闭。
Subscribe to:
Posts (Atom)















