隨筆-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 地心引力 閱讀(831) | 評論 (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 地心引力 閱讀(612) | 評論 (0)編輯 收藏
          LAMP兄弟連就是我給自己的一個新起點,相信來這里的兄弟們的想法也和我一樣。無論我們來自全國的什么地方,無論我們以前有過什么不同的經歷,來到這里的我們都一定是想讓自己改變而有一個新的開始,好的發展。那么,既然我們來了就開始吧!
          放下你的過去,放下你的經驗,放下你的包袱,給自己一個新的起點,新的開始。把握在這里短短五個月的日子,奮力拼搏闖出屬于自己的新氣象。
          在這里給大家推薦一首歌,楊培安的《夢想從心開始》,其中主要的歌詞是:
          夢想從心開始
          歌手:楊培安
          伸手抓一把陽光 乘著風翱翔
          點亮四面和八方
          色彩像煙火 繽紛又奔放
          我要活得不一樣
          讓心中沸騰的希望 帶著我勇闖
          所有堅固的城墻
          身上淚和傷 凝聚無窮能量
          看我發熱又發光
          要明天記得我名字 用我選擇的方式
          夢想從心開始
          每一步都有不變的堅持
          只有我能寫下自己的精彩故事
          要世界看見我樣子 青春驕傲的標志
          夢境從心開始
          燦爛新天地 美麗好心情
          未來的路 等我展翅高飛 奔馳
          好的東西總要和大家分享一下,希望這首歌能給大家帶來更多的陽光、更多的鼓舞,當你學習疲倦時、遇到疑惑時、遇到困難時都來聽一聽,以此激勵和督促自己。
          我最喜歡其中的這幾句:
          要明天記得我名字 用我選擇的方式
          夢想從心開始
          每一步都有不變的堅持
          只有我能寫下自己的精彩故事
          “只有我能寫下自己的精彩故事”,自己的路怎么走只有自己知道也只有自己控制方向。只有自己第一時間知道自己想要什么和怎么得到它,這就是我理解的“夢想從心開始”。
          在這里我祝愿我們49期的兄弟們和看過我這篇小小感受的童鞋們都能沖破險阻得到自己想要的!!!
          posted @ 2012-07-30 23:24 地心引力 閱讀(717) | 評論 (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 地心引力 閱讀(649) | 評論 (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 地心引力 閱讀(729) | 評論 (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 地心引力 閱讀(1123) | 評論 (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 地心引力 閱讀(747) | 評論 (0)編輯 收藏

          創業四個月,感受頗多,幾點分享:

          1.一旦選擇離開以前的環境創業,必須以最快的速度給自己重新定位,特別是自己以前是企業中的高管,請盡快放棄隨時一副牛逼很大的樣子。離開了那個組織屬性,其實你什么也不是。

          2.永遠不要覺得自己已經掌控了一切,沉下去認真分析才是正事。當覺得自己掌控一切的時候,是個極其危險的信號,任何事情都需要有充分的風險保障考慮。

          3.關系是需要用心經營的,蹲點越低,跳的越高。

          4.不要選擇性的去接受自己喜歡的信息,信息本身不因為個人喜好而變化,盡量的去收集信息,信息掌握越全面,做出的決策正確性越高。

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

          posted @ 2012-07-27 22:14 地心引力 閱讀(761) | 評論 (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 地心引力 閱讀(611) | 評論 (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 地心引力 閱讀(1921) | 評論 (2)編輯 收藏
          僅列出標題
          共3頁: 上一頁 1 2 3 下一頁 
          主站蜘蛛池模板: 视频| 罗源县| 久治县| 玉林市| 克山县| 石楼县| 松桃| 拉孜县| 岚皋县| 西峡县| 招远市| 时尚| 玉环县| 湖北省| 固原市| 克东县| 三明市| 汶上县| 贵定县| 长白| 克什克腾旗| 犍为县| 江达县| 铁岭市| 宝丰县| 舞钢市| 柘荣县| 龙南县| 阜阳市| 鄱阳县| 彭阳县| 平原县| 桂阳县| 宜黄县| 富民县| 临湘市| 五河县| 镇巴县| 桃江县| 丹棱县| 丁青县|