随笔-26  评论-12  文章-0  trackbacks-0
 

电话录音服务只是内部进行录音以及调用PhoneManager对象。许多时候服务在处理业务后需要和其它程序进行通信。.startService()stopService()适用于调用者和服务者之间没有交互的情况,否则应该适用bindSerivce()unbindService()方法

 

调用bindService()方法时:

1.       服务若没有创建

s.onCreate()--às.onBind()-à服务于访问者绑定在一起

如果访问者退出:

s.onUnBind()às.onDestroy();

2.服务已经创建

不会导致调用多次服务的创建(onCreate()和绑定(onBind()),如若解除绑定可调用unbindService()方法,系统同样会调用服务的onUnbind()-àonDestory()方法。

 

onBind()只有调用bindService()方法才会触发方法的调用,如果服务已经被绑定,该方法不会执行多次

 

onUnbind()方法只有调用unbindService()方法才会导致该方法的执行。

 

电话录音服务只是在服务内部进行录音以及调用PhoneManager对象,许多时候服务在处理业务后,需要和其它程序进行通信.startService()stopservice()使用使用者和服务之间没有交互的情况,否则应该使用bindService()unbindService()方法。

 

调用bindService()方法时:

1.       服务若没有创建

s.onCreate()-às.onBind()-à服务于访问者绑定在一起。

如果访问者退出:

sonUnBind()-às.onDestroy();

2.服务已经创建

不会导致调用多次服务的创建(onCreate())和绑定(onBind()),如果解除绑定可调用unbindService()方法,系统同样会调用服务的onUnbind()-àonDestroy()方法。

 

onBind()只有调用bindService()方法才会触发该方法的调用。如果服务已经被绑定,该方法不会被执行多次。

 

onUnbind()方法只有调用unbindService()方法才会导致该方法的执行。

 

客户端和服务通过Ibinder对象联系在一起。bindService()方法调用时,需要Intent,ServiceConnectionflag参数,其中serviceConnection对象用于接收服务onBind()方法,返回的Ibinder对象,并且该对象会传入到第二个参数serviceConnection对应的方法中,触发方法的回调,总而言之,使用客户端持有到达service对象的引用。

posted @ 2012-08-01 22:03 地心引力 阅读(819) | 评论 (1)编辑 收藏

一、Handler的定义: 
          主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 
          解释: 当应用程序启动时,Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件,进行事件分发, 比如说, 你要是点击一个 Button, Android会分发事件到Button上,来响应你的操作。  如果此时需要一个耗时的操作,例如: 联网读取数据,或者读取本地较大的一个文件的时候,你不能把这些操作放在主线程中,如果你放在主线程中的话,界面会出现假死现象, 如果5秒钟还没有完成的话,会收到Android系统的一个错误提示  "强制关闭".  这个时候我们需要把这些耗时的操作,放在一个子线程中,因为子线程涉及到UI更新,Android主线程是线程不安全的,也就是说,更新UI只能在主线程中更新,子线程中操作是危险的. 这个时候,Handler就出现了来解决这个复杂的问题,由于Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,这个时候,Handler就承担着接受子线程传过来的(子线程用sedMessage()方法传弟)Message对象,(里面包含数据)  , 把这些消息放入主线程队列中,配合主线程进行更新UI。

二、Handler一些特点 
        handler可以分发Message对象和Runnable对象到主线程中, 每个Handler实例,都会绑定到创建他的线程中(一般是位于主线程), 
        它有两个作用: (1):  安排消息或Runnable 在某个主线程中某个地方执行, (2)安排一个动作在不同的线程中执行 
        Handler中分发消息的一些方法 
        post(Runnable) 
        postAtTime(Runnable,long) 
        postDelayed(Runnable long) 
        sendEmptyMessage(int) 
        sendMessage(Message) 
        sendMessageAtTime(Message,long) 
        sendMessageDelayed(Message,long) 
        以上post类方法允许你排列一个Runnable对象到主线程队列中, 
        sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新. 
三、Handler实例 
      (1) 子类需要继承Handler类,并重写handleMessage(Message msg) 方法, 用于接受线程数据 
      以下为一个实例,它实现的功能为 : 通过线程修改界面Button的内容

01    public class MyHandlerActivity extends Activity {
02         Button button;
03         MyHandler myHandler;
04       
05         protected void onCreate(Bundle savedInstanceState) {
06             super.onCreate(savedInstanceState);
07             setContentView(R.layout.handlertest);
08       
09             button = (Button) findViewById(R.id.button);
10             myHandler = new MyHandler();
11             // 当创建一个新的Handler实例时, 它会绑定到当前线程和消息的队列中,开始分发数据
12             // Handler有两个作用, (1) : 定时执行Message和Runnalbe 对象
13             // (2): 让一个动作,在不同的线程中执行.
14       
15             // 它安排消息,用以下方法
16             // post(Runnable)
17             // postAtTime(Runnable,long)
18             // postDelayed(Runnable,long)
19             // sendEmptyMessage(int)
20             // sendMessage(Message);
21             // sendMessageAtTime(Message,long)
22             // sendMessageDelayed(Message,long)
23             
24             // 以上方法以 post开头的允许你处理Runnable对象
25             //sendMessage()允许你处理Message对象(Message里可以包含数据,)
26       
27             MyThread m = new MyThread();
28             new Thread(m).start();
29         }
30       
31         /**
32         * 接受消息,处理消息 ,此Handler会与当前主线程一块运行
33         * 
*/
34       
35         class MyHandler extends Handler {
36             public MyHandler() {
37             }
38       
39             public MyHandler(Looper L) {
40                 super(L);
41             }
42       
43             // 子类必须重写此方法,接受数据
44             @Override
45             public void handleMessage(Message msg) {
46                 // TODO Auto-generated method stub
47                 Log.d("MyHandler""handleMessage");
48                 super.handleMessage(msg);
49                 // 此处可以更新UI
50                 Bundle b = msg.getData();
51                 String color = b.getString("color");
52                 MyHandlerActivity.this.button.append(color);
53       
54             }
55         }
56       
57         class MyThread implements Runnable {
58             public void run() {
59       
60                 try {
61                     Thread.sleep(10000);
62                 } catch (InterruptedException e) {
63                     // TODO Auto-generated catch block
64                     e.printStackTrace();
65                 }
66       
67                 Log.d("thread.""mThread..");
68                 Message msg = new Message();
69                 Bundle b = new Bundle();// 存放数据
70                 b.putString("color""我的");
71                 msg.setData(b);
72       
73                 MyHandlerActivity.this.myHandler.sendMessage(msg); // 向Handler发送消息,更新UI
74       
75             }
76         }

posted @ 2012-08-01 22:02 地心引力 阅读(601) | 评论 (0)编辑 收藏
LAMP兄弟连就是我给自己的一个新起点,相信来这里的兄弟们的想法也和我一样。无论我们来自全国的什么地方,无论我们以前有过什么不同的经历,来到这里的我们都一定是想让自己改变而有一个新的开始,好的发展。那么,既然我们来了就开始吧!
放下你的过去,放下你的经验,放下你的包袱,给自己一个新的起点,新的开始。把握在这里短短五个月的日子,奋力拼搏闯出属于自己的新气象。
在这里给大家推荐一首歌,杨培安的《梦想从心开始》,其中主要的歌词是:
梦想从心开始
歌手:杨培安
伸手抓一把阳光 乘着风翱翔
点亮四面和八方
色彩像烟火 缤纷又奔放
我要活得不一样
让心中沸腾的希望 带着我勇闯
所有坚固的城墙
身上泪和伤 凝聚无穷能量
看我发热又发光
要明天记得我名字 用我选择的方式
梦想从心开始
每一步都有不变的坚持
只有我能写下自己的精彩故事
要世界看见我样子 青春骄傲的标志
梦境从心开始
灿烂新天地 美丽好心情
未来的路 等我展翅高飞 奔驰
好的东西总要和大家分享一下,希望这首歌能给大家带来更多的阳光、更多的鼓舞,当你学习疲倦时、遇到疑惑时、遇到困难时都来听一听,以此激励和督促自己。
我最喜欢其中的这几句:
要明天记得我名字 用我选择的方式
梦想从心开始
每一步都有不变的坚持
只有我能写下自己的精彩故事
“只有我能写下自己的精彩故事”,自己的路怎么走只有自己知道也只有自己控制方向。只有自己第一时间知道自己想要什么和怎么得到它,这就是我理解的“梦想从心开始”。
在这里我祝愿我们49期的兄弟们和看过我这篇小小感受的童鞋们都能冲破险阻得到自己想要的!!!
posted @ 2012-07-30 23:24 地心引力 阅读(709) | 评论 (0)编辑 收藏

今天是 7 月30 号,上一次的最后的规划小结应该是5.21 号吧,算起来有两期的规划小结都没有写了。索性这次就将第四期和第五期的规划小结一起写了。

 

在5.22 到 6.21 号

在第三期结束后的第四期了,最后只完成了ARM USB蓝牙移植这一个小的实验项目

项目又是一周,做完也就是 5.26号了,这时也是应该是在学校的第18周了吧!后来就到了考试周了,不停的考试,然后不停的突击各科的考试科目,在每天的一小段时间里,应该是从5月28开始,我不不停的在网上开始去需找一些Linux  嵌入式方向的实习职位。几乎是每天平均有3封求知邮件从我的Gmail 邮箱里发出去,当然也有很多求知信是直接从智联,51job 和大街网上发出去的。应该是平均每两天收到一个电话恢复,或者是邮件回复,但肯定不都是面试通知,因为自己当时在学校不是在北京,所以仅仅收到一些电话面试,和有些公司的面试安排,其中有redhat 的电话面试,这次电话面试真的是让我自己搞砸的,我总以为redhat 的电话面试会和英语方面有一定的关系,因为自己英语水平真的很差,所以就着重在英语上好好准备了一下,而对Linux 的基本知识只是简简单单的看了一下,总认为自己平时总是在用这些命令,要是他们问起来,我肯定能回答上来。结果就这样把电话面试搞砸了。后来反正就是不停的投简历,不停的接电话,不停的复习,然后不轻的在这一期的规划里基本都做了这些事。

 

6.22—7.9号

这不是一期的时间不过这也算是在这两期里面一个比较关键的时间点吧。因为在这一段时间里,估计简历申请就要都一个有结果的时间了,是否有面试安排,是自己决定去北京,去北京如何安排的关键影响因素,再加上最后都是专业课考试。突击压力也是比较大。到7月7号我们所有科目考试结束,我收到的5面试。我7月9 火车来北京,10 号到这里。11 号是一个周三的七天,就开始参加面试。面试并不想多说,毕竟只是实习生职位的一些面试经历,没多大的参考价值,也就不记录了。但是还是不免唠叨,有些招实习生职位的公司,完全是为了在招聘网站上给公司打广告去了。面试的时候提的问题,真是!罢了!不说这些了。

 

7.10—7.30

就如上面所说,11 号的面试挺让人失望的,并非我自己Linux 方向专业能力有问题,而是公司和自己的方向比不是很对口,无论如何最后就有点失望的回到了住所,到了第二天,12号(周四)还有面试,一大早,9点整吧,这个时间是北京公司刚开始上班的时间,有公司能挑这个时间段面试,是挺奇怪的。没办法,早早的干到面试公司,9点整,进入公司,开始面试,还是一样,实习职位面试经过不提也罢。面试成功。因为公司是做嵌入式开发板的,大多是教学用ARM 或者其他开发板之类的,有点不情愿去。中午打电话去另外一家公司,下午就转战去他们公司面试,也是我现在正在实习的公司。公司不必多说,至少方向是我喜欢的那类型。14 号(周四)下午面试通过,通知7.16号( 周一)入职实习。到目为止在公司有两个周了,那些老生常谈的在公司学习和 在学校学习很有差距的话我就不多写了,经历过就知道了。项目紧天天加班,周末也不例外。但自己毕竟是一个实习生,有时总感觉心有余而力不足啊。虽然在学校的实验项目也没少做,但学校的实验项目,所有代码都是从网上下载,修改来的。而现在让你写,真的不行,曾经的自大,曾经的不可一世,到现在早已经完全没有了,现在有的就是默默的,虚心的,慢慢的,勤勤恳恳的学习和练习工作。那么在过去的两个月里,过去的没得改,就写写。以后的,我不要永远做菜鸟,我也不会永远做菜鸟。我要找到那个不可一世的自己!

posted @ 2012-07-30 23:24 地心引力 阅读(641) | 评论 (0)编辑 收藏

背景:

            有两个图片,一个是目标背景图片, 一个是带有自身背景色彩的彩色图片

            先将这彩色图片绘制到目标背景图片中, 这一步通过BITBLT就可实现。   但实现后的效果是: 目标图片上,绘制上去的彩色图片带有其本身的背景。

           问题就来了, 我们想将彩色图片本身的背景去掉,应该如何解决?

 

解决方法:

          使用API函数:TransparentBlt   此函数将原DC中的图片绘制到目标DC中,并同时设置原图形在目标图形上的透明色。

 

  1. BOOL TransparentBlt(  
  2.   HDC hdcDest,        // handle to destination DC  
  3.   int nXOriginDest,   // x-coord of destination upper-left corner  
  4.   int nYOriginDest,   // y-coord of destination upper-left corner  
  5.   int nWidthDest,     // width of destination rectangle  
  6.   int hHeightDest,    // height of destination rectangle  
  7.   HDC hdcSrc,         // handle to source DC  
  8.   int nXOriginSrc,    // x-coord of source upper-left corner  
  9.   int nYOriginSrc,    // y-coord of source upper-left corner  
  10.   int nWidthSrc,      // width of source rectangle  
  11.   int nHeightSrc,     // height of source rectangle  
  12.   UINT crTransparent  // color to make transparent  
  13. );  


   如本例中,将透明色设置为彩色图形自带背景色时, 则使用此函数后,所得最终图形上彩色图形的自身背景色就消除了。

   示例:

  1. CDC* pDC=GetDC();  
  2.   
  3. CBitmap bmp;  
  4. bmp.LoadBitmap(IDB_BITMAP1);  
  5.   
  6. BITMAP bmpInfo;  
  7. bmp.GetObject(sizeof(BITMAP),&bmpInfo);  
  8.   
  9.   
  10. CDC ImageDC;  
  11. ImageDC.CreateCompatibleDC(pDC);  
  12.   
  13. CBitmap *pOldImageBmp=ImageDC.SelectObject(&bmp);  
  14.   
  15.   
  16. CBitmap bmpBK;  
  17. bmpBK.LoadBitmap(IDB_BITMAP2);  
  18.   
  19. BITMAP bmpBkInfo;  
  20.    bmpBK.GetObject(sizeof(BITMAP),&bmpBkInfo);  
  21.   
  22. CDC bkDC;  
  23. bkDC.CreateCompatibleDC(pDC);  
  24.   
  25. bkDC.SelectObject(&bmpBK);  
  26.   
  27. TransparentBlt(bkDC.m_hDC,100,150,bmpInfo.bmWidth,bmpInfo.bmHeight,ImageDC.m_hDC,0,0,bmpInfo.bmWidth,bmpInfo.bmHeight,#ff0000); // 设置红色为透明色  
  28.   
  29. BitBlt(pDC->m_hDC,0,0,bmpBkInfo.bmWidth,bmpBkInfo.bmHeight,bkDC.m_hDC,0,0,SRCCOPY); //画到屏幕上  


 

 

原理: 通过设置掩码位图来实现

              1)首先建立掩码位图

              2)使用掩码位图作用于彩色原图,得到变异新图(透明色为黑,其他区域为原色)

              3)使用掩码位图与目标背景图相与 (透明区域为透明色,其他区域为黑色)

              4)使用变异新图与目标背景图相或  ,得到最终图

 

图例如下:

 

 

       希望将上面小图的自身背景色去掉,得到最终图

 

所采取的步骤如下:

 

 

 

 

 

 

 

 

posted @ 2012-07-27 22:18 地心引力 阅读(718) | 评论 (0)编辑 收藏

前天apple发布了最新的mountain lion操作系统,于是赶紧给mac  mini升级了系统。写篇博客分享一下如何升级mountain lion。

如果你是6月11号之后购买的苹果电脑,那么你可以免费获取到升级兑换码,然后在app store里面点兑换就可以直接升级了。

如果你有mac developer的开发者帐号,你也可以登陆developer.apple.com去获取一个mountain lion的兑换码,还可以获取mountain lion server的兑换码的哦。

没有兑换码的话你可以选择花128元rmb升级,也可以自己到网上去下载一个安装包,4.34G。苹果的东西不像windows的,不是靠注册码,所以只要有安装包升级,就和花钱升级没有区别了。

具体到哪找升级包可以自己google一下哦。

忘了说,升级mountain lion,操作非常简单。不需要设置什么东西,升级完成之后会自动帮你删除掉升级包的,如果需要保存升级包全新安装mountain lion的话,请做好安装包的备份工作。

posted @ 2012-07-27 22:17 地心引力 阅读(1112) | 评论 (0)编辑 收藏

时间:2007年5月场合:在一份Android的规格文档中话语:触屏是不可能完全代替物理按键的后续:G1手机是一款有着全键盘的手机,后续的真正的G2(不是HTC的)也是有键盘的结果:谷歌似已完全放弃了键盘手机,更不用说平板了

  08年,谷歌推出了G1手机,这个手机虽然拥有键盘,但很明显,触屏功能是最主要的。两年多后,还是由t-mobile与谷歌合作,发布了真正的G2手机,也是有键盘的——这是和HTC的G2最明显的一个区别。虽然就我个人而言,还是喜欢有键盘的手机,但从大趋势上来看,触屏正在以势不可挡的力量,将键盘从移动设备中驱逐出去。

  作为一个移动设备,轻便是很重要的。键盘虽然比触屏在长篇文字输入上更有优势,但牺牲的是轻便性——这个道理很浅显。但并不完全是因为这个。

  电脑大致上是由输入、输出和算法三样东西构成的。输出上,今天已是液晶屏的世界,算法上则有云计算(非本地计算)的变革。输入端上,我们则看到了一系列的变化。相当古老的输入装置是磁带机,后来演变为键盘,再后来加入了鼠标以做快速屏幕定位。键盘为主鼠标为辅的输入工具,是很长一段时间的电脑标配。

  我之所以用键盘为主鼠标为辅这样的字眼,概因为一台电脑不配鼠标总还是能运作,但不配键盘基本就歇菜了。这两个东西,键盘属于重输入,鼠标偏向轻输入。06年的时候,在一场会议中聆听keso的发言。他说道,在互联网上,用鼠标的人比用键盘的人多。这话背后的意思大致就是,数字世界里,看的人多,写的人少——这一点,无论是从当时的博客数据,还是今天的微博数据,都得到了印证。

  在游戏世界里,用鼠标的,通常都是比较简单的游戏。而大型游戏的高手级玩法,需要动用键盘快捷键。然而,一旦脱离电脑,游戏的指令输入,就已经发生了变革。

  这就是WII.WII游戏机配有一个无线遥控器,玩家手握这个遥控器做各种动作来完成指令。而到了kinect,连这个遥控器都省了——这是人体动作输入。人体动作输入(捕捉)使得使用者无需经过一定意义上的培训(使用键盘还是要小小的操练一下子的),立刻便可以上手。这也是经常可以看到很小的小孩在那里能玩iPad而玩不了电脑的原因。

  触屏的动作捕捉,极大地降低了使用门槛——想想黑莓那个让人望而生畏的全键盘手机吧。智能手机的另外一个解读就是“傻瓜化使用的手机”。虽然它是高科技产品,但如果一派技术风范,是很难让最大范围上的大众产生亲近感的。

  后来推出的iPad2,不仅有触屏输入,还提供了另外一种动作输入的可能,那就是这款设备提供了摄像头。Kinect就是依靠摄像头来完成人体动作捕捉的。

  动作捕捉还没完,还有一种输入法也已经从实验室里走了出来,那就是语音输入。苹果的Siri推出后,出现了席卷全球的所谓“调戏Siri”的实验。语音输入目前还有一些问题(比如口音重的人很难得到好的体验),但它依然是一种傻瓜化的输入方法。

  我个人一直向很多人推荐《铁甲钢拳》(Real Steel)这部好莱坞电影。从这部主要是讲机器人拳击的电影中,你会看到若干种“指令输入”。人类可以用语音来指挥机器人,还可以通过一种形似iPad的东西来触屏输入指令,最后,还可以通过自己做一些动作来机器人捕捉并效仿。对比一下其它科幻片里,人类敲击着键盘让电脑完成各种任务的场景,效率之高低,一目了然。

  我总觉得一个企业并不是没有灵魂的纯粹意义上的多人集合体,企业有其根深蒂固的基因。谷歌是一个高科技公司,虽然它推出的搜索服务从使用者角度而言非常简单,但完成这个服务需要极其复杂的运算。在谷歌的习惯性思维里,复杂是一个绕不过去的潜意识。两位创始人博士虽然没有毕业,但好歹读到了这个份上,天然也是往“复杂”里靠的。坚持键盘输入,大概就是这样的意识驱动:一个可以视为电脑的智能手机,怎么可以没有键盘这种重输入装置呢?

  但苹果不是,它其实是一个消费品公司。乔布斯在apple机时代就要求工程师去除电脑的散热器——这个要求在工程师里眼里很荒唐,但乔布斯的立场是:消费者会被电脑散热器的嗡嗡声搞得很烦躁。虽然乔布斯这个很荒唐的想法没有实现,但从中我们的确可以咀嚼出点什么:谷歌要造电脑,是绝不会有这个荒唐的念头的。

  键鼠输入,还是有些机器本位的:人需要学习才能使用机器。动作输入(触屏或摄像头捕捉)、语音输入,则偏向人本位:人无需学习。只是不得不追问这样一句话:当我们越来越能傻瓜化地使用智能设备时,我们会不会傻瓜化呢?

posted @ 2012-07-27 22:16 地心引力 阅读(733) | 评论 (0)编辑 收藏

创业四个月,感受颇多,几点分享:

1.一旦选择离开以前的环境创业,必须以最快的速度给自己重新定位,特别是自己以前是企业中的高管,请尽快放弃随时一副牛逼很大的样子。离开了那个组织属性,其实你什么也不是。

2.永远不要觉得自己已经掌控了一切,沉下去认真分析才是正事。当觉得自己掌控一切的时候,是个极其危险的信号,任何事情都需要有充分的风险保障考虑。

3.关系是需要用心经营的,蹲点越低,跳的越高。

4.不要选择性的去接受自己喜欢的信息,信息本身不因为个人喜好而变化,尽量的去收集信息,信息掌握越全面,做出的决策正确性越高。

5.管理三部曲:布局、造势、摆平。暗布局,明造势,借势摆平!

posted @ 2012-07-27 22:14 地心引力 阅读(752) | 评论 (1)编辑 收藏

和大多数八零后的男孩一样,小时候就喜欢打游戏,即便是坦克大战和热血足球这样的红白机游戏,我现在还和我表弟偶尔用模拟器过 过瘾。比起现在一些炫目华丽的游戏,那些游戏无疑更加经典持久。不过今天不谈我说说我玩过的留给我回忆的那些PC游戏。有的也许你非常熟悉,有的也许你闻 所未闻。人说十年就一个代沟,程序员则是五年。

 

赤壁

联 想“幸福e家”(好像是这个名)电脑附带的一款即时战略游戏,由前导公司97年出品(如果你想到的是如今的网游,那么说明我们不是一个年代的人,呵呵)。 知道这款游戏的人并不多。很多老玩家知道“血狮”,这一款发售时火爆异常,但是最终丢尽中国游戏厂商脸面的游戏。可是赤壁的销量却远远超过了它——十五万 套。97年,十五万套软件是怎样一种概念?

故事太过久远,我的记忆并不丰盈。贴上一段网上翻到的介绍:“这是由前导公司继《三国之官渡》之后出品的第二部以三国为背景的即时战略游戏。游戏在 Win 95下运行,容量150MB。硬盘安装需30MB。游戏采用640×480×256色的高分辨率画面。3D的主菜单做得还算精美,界面也做得不错,人物头 像用的是电视连续剧《三国演义》的剧照,让人颇感亲切。游戏中的各种建筑古色古香,将军的士兵可从衣着分辨兵种,便于玩家操纵。游戏中共有25个兵种(如 步兵、骑兵、弓箭手、投石车)、4种船只(运输船、快船、战船、连环战船)、26种建筑(如帅帐、弓兵所、步兵所、骑兵所、箭楼、帅旗、武器库、木材场、 船坞、钱庄)、10种阵形(如梅花、连环、金锁、八卦)、9种计谋(如乱军、十面埋伏、火攻、滚木等)。游戏的生产资料是有中国特色的小麦、木材和镔铁。 通过钱庄转换为战争所需的钱。游戏中的建筑物城内的和城外的样子不同,如中军帐在城内是一座带有院墙、门外摆着石狮子的大厅,而在城外是一座大帐。游戏的 音乐气势恢弘,音效不多但很热闹。”

 

破碎虚空

image 它是我真正正儿八经地投入去玩的第一款游戏(这是一款2001年的游戏,不是后来的同名网游)。小时候打游戏的历史就是和父母斗争的历史,既要躲闪,又要 反抗。玩这款游戏也是从周末我兴冲冲骑车到同学家开始的,他的父母是老师,周末总是需要给去学校给别的孩子补课,于是老师的孩子就被放养了。当时我就特别 感慨,老师的孩子真自由。游戏改编自古龙的小说。在当时纸片一样的游戏时代里,居然有这样一款战斗画面如此绚丽的国产游戏(即使放到今天也不显得太次), 着实令我惊讶不浅。

“飞燕刀法”、“雷霆刀法”,那些游戏中武功的招式,我现在依然清晰记得。可以说,这是一款真正让我认识到什么是RPG的游戏。人对于第一次发生的 事情总是颇易感怀。如今和朋友聊天,却没有多少人知道这一款游戏,同龄人的国产单机游戏经历似乎都是从《金庸群侠传》、《轩辕剑》、《仙剑奇侠传》等等公 认经典开始的,北斗星工作室的游戏(记得后来又出了一款《仙狐奇缘》)兴许过于小众了?

上面两款游戏下载地址就不提供了,感兴趣的同学去verycd上搜吧。

 

最终幻想8

这 是我记忆里最唯美的日本RPG游戏,没有之一。即便是最终幻想后面几代也没有在“唯美”的意义上超过它。从游戏革命性的意义上说,它没有第七代重大,但是 对当时的我来说,游戏实在是太美了。从开场的动画开始,羽毛、花园、大海、战斗的场面,史克威尔的经典,莉诺雅和史克尔的浪漫爱情,高潮部分王菲演唱的主 题曲《Eyes On Me》,直到最后的唯美结局……

整个英文版游戏二十万字的对白,我用的是PS模拟器,我已经记不清我是怎样靠一个文曲星硬是把它啃下来的,印象中工作以前也就那一段啃游戏的时间里 英文进步最快。游戏打到最后,整个游戏过程几十个小时,我的角色都是99级,但是完全没有感觉到练级的枯燥,事实上,我根本没有想做练级这件事情。

最终幻想历代总是会放一些彩蛋,最终幻想8也一样,陆行鸟系统是里面很有意思和增加可玩性的部分,可惜的是我使用的是模拟器,当时没有在游戏之外培 养陆行鸟。召唤兽+魔法卡片系统也是值得回味的亮点之一,还记得施法画面的华丽效果,每个人物在少血时都能高概率使出必杀技。唯一遗憾的是当时没有干掉隐 藏boss奥美嘉。

 

泰伯利亚之日

请 注意我说的是99年的游戏,以及同一引擎下的资料片“烈焰风暴”,而不是后来推出的3D续作。westwood公司留下了红警这个传奇的游戏,但我却对泰 伯利亚之日情有独钟。这款游戏其实并不算卖座,但是2D画面却相当不错,而且兵器单元在爆破的时候演算效果也颇为到位,比起之后推出的看起来像儿童游戏的 红警3可不知好了多少。另外,游戏的制作对于细节非常重视,这在游戏中很容易体会到,比如起伏的地形对于炮弹轨迹的影响、容易破碎的冰面、行走缓慢的森林 等等。遗憾的是这款游戏平衡性做得比较差,NOD比GDI要强出许多,再一个AI也遭人诟病。不过,如果你是2D即时战略游戏的爱好者,是不能错过它的。

突然的流星雨带来了泰伯利亚矿这种能够自我生长、具备超强能量的矿物晶体。NOD和GDI双方展开了遍及欧洲和非洲的第一次泰伯利亚战争。NOD被 GDI击败后东山再起。2015年,疯狂传播的Tiberium矿物破坏了周边的生态环境和大陆的每一个城市,GDI不得不把人口转移到北极地区寻找对 策,NOD则干脆转入地下,从事他们的基因转变研究。双方都拥有非常先进的科学技术,GDI的拥有强大的空间技术和战车技术,设计出了The Wolverine、泰坦、 猛犸II型、神像等步行载具;NOD拥有强大的电脑技术和隐形技术,并且能熟练的运用泰伯利亚制作武器、装备或者新的生物。

 

实况足球系列

其 实足球游戏最早我是从FIFA2000开始的,换句话说,我是一个从FIFA转向实况的足球游戏迷。但是FIFA2000在那个时候确实是无可替代的,不 仅仅是画面的效果这种FIFA的强项,游戏性在当时也是非常优秀的。FIFA的操作略显复杂,我适应了好一段时间,但是习惯以后就非常舒服。后来中央五台 还直播FIFA的国际比赛,电脑报接连报道了一些FIFA战队的近况,真是火了。

之所以说它是一个系列是因为,从05年开始,每一代新发售的实况足球游戏,我都会跟上。从操作感上面来说,实况领先FIFA似乎有N年。读书的年代闲暇时间多,总是去研究怎么让人物做出各种动作,甚至背出各种奇异的bug……

现在我还在玩实况,不过年龄增长使得要求大幅度提高,玩一阵子就意兴阑珊。不过,大师联赛依然是我最常玩的游戏项目。

 

足球经理系列

我 玩足球经理的时间并不早,但是从来不玩汉化版,版本也只玩SI公司的。每个人心中总有一种控制别人,以及渴望被人追捧的欲望(俗称“意淫”),XX经理、 XX大亨这一类的游戏都是利用人的这一特性设计开发的。不过这一类游戏的质量可千差万别。这款游戏最早其实名字叫做冠军足球经理(CM),后来SI和 Eidos分家,Eidos得到了冠名权,而SI得到了程序版权。很明显,Eidos是短视的。冠名权可以火一时,但是这一类游戏玩的就是数据库。于是 CM逐渐被挤出市场。

我玩过大球会,也用过小球会,甚至变态到把自己球队的青年队安插到巴西甲级联赛,把预备队安插到荷兰甲级联赛去踢球。起初,我就是这样一个修改狂。 其实这样的游戏投资可以不大,没有创新,紧靠历代数据库的更新就可以延续很久。很多玩足球经理的人都想,如果能够把它和实况足球这样的模式结合起来,既可 以培养球员,有足球经理这样丰富的体验;又可以使用实况足球这样的模式踢比赛该多好!其实,几年前FIFA某一个版本已经支持将FIFA足球经理的数据放 置到FIFA足球中去踢比赛,这个想法太好了,EA也很有钱,只可惜没有坚持做下去,游戏体验上也始终没法达到第一的水准。

 

暗黑破坏神II

暗 黑破坏神II在我看来是一款几乎不可能被逾越的游戏了。即便是暗黑III,亦让我感到失落,它确实改进了暗黑II不足的地方,3D可以说马马虎虎(这倒还 好,毕竟暗黑系列并不以画面见长),但是游戏中的战略性,以及打击快感消失了,地狱、炼狱奇恶无比的瞬移秒杀让我无所适从。暴雪系列的游戏性绝对无可指 摘,但是游戏发展的方向似乎需要考虑考虑了。

第一幕的草地,第二幕的沙漠,第三幕的雨林,每一幕都具备鲜明的场景,第四幕显得有些仓促。冰系的魔法或者是招式都具备很强的打击感,譬如亚马逊的 冻结之箭,爆裂的效果直到现在也可以说非常过瘾。而技能系统、装备系统可以说一直是暴雪的强项,这些都是游戏耐玩性的保证。我忘记我已经用各种角色、不同 模式通关十几、或者几十遍了,如果你是RPG玩家却还没有玩过它,我强烈建议你补补功课,不过最好安装一个高分辨率的补丁。

游戏发布十年后,一款MOD都可以炒到沸沸扬扬,而暴雪还在为它提供修复bug和修正平衡性的补丁,我不相信还有哪一款单机游戏可以达到这种高度。

 

posted @ 2012-07-26 22:32 地心引力 阅读(598) | 评论 (0)编辑 收藏

一直想学习怎么使用spring 的事务,在网上查了很多资料,还是不知道怎么写,大都是基于注解方式的,要么就是基于hibernate的事务,而且没有完整的例子,都是代码片段,这里我自己写了一个简单的demo,供给大家学习

 

1、建立一个对象(跟数据库中的表对应)

 

Java代码  收藏代码
  1. package hb.bean;  
  2.   
  3. public class Book {  
  4.     private int id;  
  5.     private String name;  
  6.     private String author;  
  7.     private int num;  
  8.   
  9.     public int getNum() {  
  10.         return num;  
  11.     }  
  12.   
  13.     public void setNum(int num) {  
  14.         this.num = num;  
  15.     }  
  16.   
  17.     public int getId() {  
  18.         return id;  
  19.     }  
  20.   
  21.     public void setId(int id) {  
  22.         this.id = id;  
  23.     }  
  24.   
  25.     public String getName() {  
  26.         return name;  
  27.     }  
  28.   
  29.     public void setName(String name) {  
  30.         this.name = name;  
  31.     }  
  32.   
  33.     public String getAuthor() {  
  34.         return author;  
  35.     }  
  36.   
  37.     public void setAuthor(String author) {  
  38.         this.author = author;  
  39.     }  
  40. }  

 

 2、建立一个接口(实现对表的相关操作)

 

Java代码  收藏代码
  1. package hb.dao;  
  2.   
  3. import hb.bean.Book;  
  4. import java.util.List;  
  5. import org.springframework.transaction.annotation.Transactional;  
  6.   
  7. @Transactional  
  8. public interface BookDAO {  
  9.       
  10.     //查看book表中的所有数据  
  11.     public List listBook();  
  12.       
  13.     //向book表中插入一条数据  
  14.     public void insertBook(Book book);  
  15. }  

 

 3、实现接口的操作

 

Java代码  收藏代码
  1. package hb.dao.imp;  
  2.   
  3. import hb.bean.Book;  
  4. import hb.dao.BookDAO;  
  5. import hb.row.UserRowMapper;  
  6.   
  7. import java.sql.ResultSet;  
  8. import java.sql.SQLException;  
  9. import java.util.List;  
  10.   
  11. import org.springframework.jdbc.core.JdbcTemplate;  
  12. import org.springframework.jdbc.core.RowMapper;  
  13. import org.springframework.jdbc.core.support.JdbcDaoSupport;  
  14. import org.springframework.jdbc.datasource.DataSourceTransactionManager;  
  15. import org.springframework.transaction.TransactionStatus;  
  16. import org.springframework.transaction.annotation.Transactional;  
  17. import org.springframework.transaction.support.TransactionCallbackWithoutResult;  
  18. import org.springframework.transaction.support.TransactionTemplate;  
  19.   
  20. import sun.jdbc.odbc.ee.DataSource;  
  21.   
  22. @Transactional  
  23. public class BookDAOImpl extends JdbcDaoSupport implements BookDAO {  
  24.       
  25.     public DataSourceTransactionManager transactionManager;  
  26.   
  27.     public void setTransactionManager(DataSourceTransactionManager transactionManager) {  
  28.         this.transactionManager = transactionManager;  
  29.     }  
  30.   
  31.     @SuppressWarnings("unchecked")  
  32.     public List listBook() {  
  33.         String sql = "select * from book";  
  34.         //JdbcDaoSupport里面有jdbcTemplate这个对象的set方法.JdbcTemplate这个类需要配置数据源  
  35.         List list = this.getJdbcTemplate().query(sql, new UserRowMapper());  
  36.         return list;  
  37.     }  
  38.   
  39.     public void insertBook(final Book book) {  
  40.         final String sql = "insert into book(id,name,author,num)values(?,?,?,?)";  
  41.         TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);  
  42.         final JdbcTemplate jdbcTemplate = this.getJdbcTemplate();  
  43.         transactionTemplate.execute(new TransactionCallbackWithoutResult(){  
  44.             @Override  
  45.             protected void doInTransactionWithoutResult(TransactionStatus arg0) {  
  46.                 Object[] params = new Object[] {book.getId(), book.getName(), book.getAuthor(),book.getNum() };  
  47.                 //下面的语句是用来测试事务异常的情况  
  48. //                new Integer("huangbiao");  
  49.                 jdbcTemplate.update(sql, params);  
  50.             }  
  51.         });  
  52.           
  53.     }  
  54.   
  55. }  

 

 4、继承RowMapper 接口接受返回过来的结果集

 

Java代码  收藏代码
  1. package hb.row;  
  2.   
  3. import hb.bean.Book;  
  4.   
  5. import java.sql.ResultSet;  
  6. import java.sql.SQLException;  
  7.   
  8. import org.springframework.jdbc.core.RowMapper;  
  9.   
  10. public class UserRowMapper implements RowMapper {  
  11.   
  12.     public Object mapRow(ResultSet rs,int index) throws SQLException {  
  13.         Book book = new Book();  
  14.         System.out.println(rs.getString("name"));  
  15.         book.setName(rs.getString("name"));  
  16.         return book;  
  17.     }  
  18. }  
posted @ 2012-07-26 22:31 地心引力 阅读(1907) | 评论 (2)编辑 收藏
仅列出标题
共3页: 上一页 1 2 3 下一页