Silverlight C# 遊戲開發:方向鍵的組合,八方向實現

來源:互聯網
上載者:User

在遊戲中,有一種情況是斜向移動,就是同步選取兩個方向,形成斜線操作,在Win32GDI開發中,可以通過在邏輯迴圈裡加入鍵盤狀態判斷取得多個鍵進行操作,但是在Silverlight中鍵盤的事件是單個的,不能取得多個鍵盤的狀態,園友提出一個問題,就是我的Flyer小遊戲只能上下左右控制,而不能斜向行動,今天我們來解決這個問題,實現八個方向的正確行為動作。

針對這個解決方案初步的想法,對於鍵盤的輸入來說,可以使用一個隊列進行鍵盤狀態儲存,比如使用一個List儲存Key的狀態,然後在KeyUp的時候釋放掉沒有用的Key,判斷一下按下的順序就可能得到所有方向的狀態,但是這有幾個問題,在按下多鍵都會出重複鍵問題,而按下的順序未必準確,那麼出隊列未必一定是準確的釋放,比如我可以同步選取ABC,而釋放順序是BCA,得到的結果就不是一個準確的List,這種方法看起來可行,但是實際過程中卻不一定是這樣的情況,所以問題沒有解決。

這個實現可能有很多解決方案,在這裡我們用一個直觀的解決方案來解決,使用狀態表來完成,可以分析出來一個按鍵行為和行動方向行為的共性,他們是一個3x3的映像:

從上面的圖形可以看出來,是一個3x3的二維數組,看看和什麼很像呢——遊戲手柄,我們可以用一個二維數組來儲存所有的狀態,將按下的數字組合查表得到對應的狀態。

就如所示,我們可以使用一個狀態來完成它,寫成代碼的就是這樣:

 

public enum emUserDir
{
上, 下, 左, 右, 左上, 右上, 左下, 右下, 中
}
emUserDir[,] UserDir = new emUserDir[3, 3]
{
{emUserDir.左上,emUserDir.上,emUserDir.右上},
{emUserDir.左,emUserDir.中,emUserDir.右},
{emUserDir.左下,emUserDir.下,emUserDir.右下}
};

 下面樣本是在自建工程MainPage中的KeyDown事件: 

        void MainPage_KeyDown(object sender, KeyEventArgs e)
{
string temp = e.Key.ToString();
switch (e.Key)
{
case Key.Up:
if(vertical > 0)
vertical -= 1;

break;
case Key.Down:
if (vertical < 2)
vertical += 1;

break;
case Key.Left:
if (horizontal > 0)
horizontal -= 1;

break;
case Key.Right:
if (horizontal <2 )
horizontal += 1;
tbTextRightKey.Text = temp + "=按下";
break;

}
string Text = UserDir[vertical, horizontal].ToString();
}

可以在最後的Text得到準確的位置枚舉資訊,為了更直觀,咱們做一個輸出資訊,具體Code就請下載原始碼吧:)在這裡下載

而最終的效果如下,各位下載代碼直接運行看吧

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.