Get your own free workspace
View
 

paper

Page history last edited by PBworks 5 years, 12 months ago

洛克人初審文件V.7

 


 

摘要

  腦在現在社會中佔有極重要的角色,除了處理文件外,電腦遊戲幾乎成為全民運動。然而目前多數的電腦遊戲多半使用鍵盤、滑鼠或搖桿來進行,僅是使用手部來做操控動作,久之便略嫌單調。因此,此次專題研究便以「洛克人遊戲視訊控制介面之設計與實作」來研發更富娛樂性之遊戲方式。隨著視訊的普及與EyeToy相關遊戲,用視訊來玩遊戲的方式也逐漸增加,故本組利用視訊擷取動作,再配上遊戲做一結合,製作出遊戲控制介面,以人物姿勢來控制遊戲的進行,使遊戲進行方式更富娛樂性以及動作性。

第一章 簡介

1.1 動機

  過去至今,大多數的電腦遊戲都是靠雙手握著操作器在玩遊戲。隨著時代變遷,一切將慢慢被改變。視訊設備的普及,使其相關應用程式也逐漸興盛起來。例如:在2003年SONY發表EyeToy視訊1,改變了傳統的遊戲方式,相關遊戲也陸續推出,如圖1.1所示。本次專研以視訊應用軟體為主,發展兼具健康與娛樂的遊戲控制介面。大多數電玩都需要花上大量的時間或是金錢,長時間的遊戲更造成遊戲者的生理與心理多方面的影響。前陣子新聞報導指出:一名年男子,疑似因長時間坐在電腦前,於抽菸後在廁所暴斃2。所以本專題研究的目標是提供玩家不僅可以快樂的遊戲,也可以享受到運動帶來的益處。

  經過資料蒐集和展覽觀摩,發現利用視訊做遊戲控制介面是目前值得嘗試的新方向。運用肢體動作的表現,反映在電腦遊戲的人物上,這是本組的基本構想。於是選擇洛克人的遊戲,為我們遊戲介面實作的基本模組,以虛擬鍵盤所發出的訊號,方便使用者控制遊戲中人物的動作。例如:使用者做跳躍動作,遊戲人物就跟著跳起,彼此達到行動同步的機制,達到完全融入遊戲的境界。

     

1.2 研發階段

  程式研發共分為三階段:

    第一階段:做出固定的觸發區塊,提供使用者用身體動作去感應螢幕中介面的圖示,使虛擬鍵盤指令發動。

    第二階段:針對第一階段的觸發區塊做修改,讓觸發區塊跟著使用者移動,在操作遊戲時動作更為流暢。

    第三階段:為了達到不使用區塊觸發,又能直接判斷人物動作是否達到預定姿勢,在不超出視訊範圍的先決條件下,虛擬鍵盤所發送的訊息能夠準確反應使用者之動作。此階段為本小組發展控制介面之重點。

 

1.3 文件架構

  第二章為探討遊戲控制介面,其開發過程所使用到的相關技術;第三章則解說本專研目前研究進度與困難;第四章將對目前發展情況做一總結。

 

第二章 相關技術探討

2.1 視訊處理

  視訊處理分為以下三步驟。首先必須取得視訊畫面;接著從視訊中擷取圖片,做二值化與圖片相減的處理;最後則是判斷是否達到觸發條件。接下來將對這些步驟一一做探討。

2.1.1 視訊擷取

  利用capCreateCaptureWindow函數來取得視訊,指令如下:

   THandle capCreateCaptureWindow(

    PChar  lpszWindowName, //指定視窗名稱

    DWord  dwStyle,     //指定視窗樣式

    Integer x,y,       //指定視窗左上角座標

    Integer nWidth,nHeight, //指定視窗寬度及高度

    THandle hwndParent,   //指定父視窗HANDLE

    Integer nID);       //指定視窗辨識碼

  取得視訊所拍攝的畫面後,必須將畫面顯示出來。所以使用capPreview來顯示圖片,以及藉由capPreviewRate函數控制畫面的更新速率,如此便可得到動態的影像4。再運用GetDC函數,從視訊畫面擷取圖片以便應用。

 

2.1.2 圖片相減

  假使以前一秒(圖2.1)與後一秒所擷取的圖片(圖2.2)相減(圖2.3),便無法得到所需的完整人型。為獲得清晰的人物輪廓,故使用Timer指令,來取得一小段時間內的無人背景(圖2.4),再將背景圖與過數秒後擷取的圖片(圖2.5)做相減(圖2.6),以及二值化處理。因為圖片中的每個點由RGB三個數值構成,判斷不易。透過二值化,讓每個點的RGB值都為0〈黑色〉或255〈白色〉,方便之後的判斷,這樣就能取得最完整的人物資訊。

     

2.1.3 視訊觸發判斷

  利用處理過後的圖片來判斷,若某一個特定區域超過定量的白點。例如圖2.7,手臂大約觸碰到3/4的射擊鍵,已達定量,就確定有達到觸發的條件。

     

2.2 鍵盤觸發

  經過視訊觸發判斷後,透過鍵盤觸發的指令,使洛克人產生動作。透過網路上的尋找,找到模擬鍵盤按下的函數─keybd_event5。一開始單純的使用keybd_event函數,再加入了Sleep函數,讓按下與彈出間有時間差,使控制方式能更順暢。Sleep函數宣告如下:

   VOID Sleep(

    DWORD dwMilliseconds); //停止多少毫秒

  不過此Sleep函數主要是讓整個視窗動作都停止,操作時很不方便。若要同時做兩個動作,勢必有一動作無法做出,所以使用另一個物件─Timer。它的使用方式跟Sleep差不多,但是卻不會使得程式有停止運作的感覺。與Sleep函數不同的是,每一個Timer都有自己獨立的時間控制,不會影響到一整個程式的運作,因此沒有使整個程式停止的問題。

  原本希望此程式能控制所有電腦遊戲,但有某些遊戲仍無法透過控制介面操作。經過多次嘗試,找到MapVirtualKey函數,獲得進一步的改善。MapVirtualKey函數可將英文文字轉為鍵盤的掃描碼,便能完整模擬鍵盤按鍵的訊號。

 

2.2.1 keybd_event函數

  鍵盤觸發的原理是利用keybd_event函數來模擬鍵盤做出動作,並利用視訊處理後的結果來判定是否執行觸發動作。例如觸發X這個按鍵,keybd_event(‘x’,0 ,0 ,0 ),函數宣告如下:

   VOID keybd_event(

    BYTE bVk, //虛擬鍵碼

    BYTE bScan, //硬體掃描碼

    DWORD dwFlags, //按鍵按下或彈起的狀態

    DWORD dwExtraInfo ); //附加鍵狀態

 

2.2.2 MapVirtualKey函數

  由於掃描碼必須使用MapVirtualKey( 0 , 0 ) 函數,才能完整模擬鍵盤按鍵的訊號。函數宣告如下:

   UINT MapVirtualKey(

    UINT uCode, //虛擬鍵碼或掃描碼

    UINT uMapType); //執行轉換

  接著觸發X的按鍵的最終寫法為:keybd_event(‘x’, MapVirtualKey(‘x’,0 ),0 ,0 ),以上是按下X這個按鍵,所以還需要「彈起」,也就是放掉按鍵。指令為KEYEVENTF_KEYUP,以下為寫法:keybd_event(‘x’, MapVirtualKey(‘x’,0 ), KEYEVENTF_KEYUP ,0 )。

 

2.2.3 Timer物件

  當控制按鍵時,有時還需控制動作所需時間。為了讓使用者能更方便的操作,因此加入Timer物件,直接固定某些特定按鍵的時間。使用方式是先引入Timer的控制物件,在Timer控制秒數如下:

   Timer1->Interval = 1000; //數值1000代表1秒

 

第三章 目前進度與遭遇問題

3.1目前進度

  前所撰寫的程式,是靠圖片與圖片區塊之間的變化,來判斷是否該送出指令至遊戲中,進而使遊戲中的人物做出動作。目前進度可分為三階段。

  第一階段,為使玩家正確做出指定區塊之動作,因此將每個動作的區塊附上了一個類似按鈕的圖片,如圖3.2所示。如此玩家能更容易的看出該碰觸的位置,而達到觸發條件。

  3月25日校慶當天,在銘傳大學管理大樓2樓中庭舉辦「真人版洛克人大賽」,提供給全校師生試玩,並收集玩家意見,如圖3.1所示。經過測試與比賽後發現,按鈕區塊是固定的,不能隨著玩家的移動作更動,導致玩家只能在固定點進行遊戲,使得遊戲進行過程顯得僵化。

     

  第二階段,為了解決按鈕區塊位置固定的問題,目標是在視訊畫面的範圍內,讓按鈕區塊能夠跟著玩家的移動做變化。必須先找出玩家的中心點,之後再利用此中心點算出各個按鈕區塊的相對位置,如圖3.3所示。

  第三階段,為了做的更擬真,希望能將按鈕區塊去掉,如圖3.4所示。讓玩家做出的動作即刻展現,而非靠按鈕區塊的觸發。此階段為本組未來發展的方向。

     

3.2遭遇問題

  程式發展至今,遭遇許多問題,但大多已一一克服,唯獨在第三階段程式的判斷方法無法解決。目前尚未找到較好的方式可以判斷出玩家動作,曾嘗試過對擷取的圖像做橫向與縱向的Histogram,將人像框住,如圖4.1。以便找出人的頭、身體和腳,但圖像如雜點過多時,馬上會影響Histogram判斷的結果。雜點易隨著燈光或人的位置改變而出現,如圖4.2,所以這個方式並不能完全達到需求。未來將努力克服這個難關,完成最終希望。

     

第四章 總結

  經過多次的實驗測試與舉辦比賽活動,我們發現當初的構想並不完美。遊戲的便利性和環境適應的彈性,仍然是我們必須加強與努力的重點。為了解決這個棘手的問題,本小組決定再開發第三種的遊戲控制介面,以求發展更好的雜點去除應對策略,提升程式在不同環境中的適應力。相對的,也加強使用者操控的順暢度與方便性,目標是:只要在視訊可見範圍中,程式均可鎖定並且分析使用者的動作狀態,直接執行指令傳送,使玩家能心無旁鶩。

 

參考文獻

1 美國playstation網站 http://www.us.playstation.com/News/PressReleases/150

2 TVBS新聞 http://www.tvbs.com.tw/news/news_list.asp?no=sharan20050821004541

3 巴哈姆特電玩資訊站 http://newodin.gamer.com.tw/2/6552.html

4 多媒體視訊程式設計-使用Delphi 張銘華 金禾出版社

5 K.Top論壇 http://delphi.ktop.com.tw

Comments (0)

You don't have permission to comment on this page.