天天看點

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

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

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

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

<a target="_blank" href="http://blog.51cto.com/attachment/201111/161546213.jpg"></a>

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

<a target="_blank" href="http://blog.51cto.com/attachment/201111/161555937.jpg"></a>

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

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 &gt; 0)

vertical -= 1;

break;

case Key.Down:

if (vertical &lt; 2)

vertical += 1;

case Key.Left:

if (horizontal &gt; 0)

horizontal -= 1;

case Key.Right:

if (horizontal &lt;2 )

horizontal += 1;

tbTextRightKey.Text = temp + "=按下";

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

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

本文轉自nowpaper 51CTO部落格,原文連結:http://blog.51cto.com/nowpaper/712582