2012-12-03 23 views
0

有人能夠舉例說明如何更改用戶按下鍵盤時繪製的紋理嗎?XNA更改繪圖當玩家使用鍵盤時

基本上我有5個畫面圖像stood stillupdownleftright

我的第一次嘗試是使布爾條件的更新的方法,例如如果keys.left按下左矩形移動,對於拉伸方法繪製人物向左移動,我的問題是他的紋理stood still在不同方向移動時不會消失並重疊。

我試過其他語句等,但我堅持基本動作。

回答

1

所以這是很僞代碼,但是這是一個基本的方法如何做到這一點

首先,我們創建類,其中包含關於玩家的我們所有的信息。您還可以添加健康,分數等。

class Player 
{ 
    Texture2D Sprite; 
    Vector2 Position; 
    Vector2 Velocity; 
    static const float PlayerSpeed = 5; 
} 

這裏重要的是位置(左上精靈的),在速度這僅僅是我們的紋理,我們要使用和精靈(改變每一秒的量)。當然,最好只使用一個播放器紋理並相應地修改源矩形。

現在我們的輸入處理。

void OnKeyboard(GameTime aGameTime, KeyArg aKey) 
{ 
    if(aKey == Keys.Left) 
    { 
     mPlayer.Velocity = new Vector2(-Player.PlayerSpeed, 0); 
     mPlayer.Sprite = TextureManager.GetTexture("left_player"); 
    } 
    else if(aKey == Keys.Right) 
    { 
     mPlayer.Velocity = new Vector2(Player.PlayerSpeed, 0); 
     mPlayer.Sprite = TextureManager.GetTexture("right_player"); 
    } 

    mPlayer.Position += aGameTime.EllapsedMiliseconds * mPlayer.Velocity; 
} 

在這裏,我們只是檢查按下哪個鍵,修改速度並更改我們播放器的當前精靈。最後一行是最重要的一行,這會使用由幀經過的時間修改的速度修改玩家位置。這樣,即使幀速率不一致,您也可以穩定運行。

void Render() 
{ 
    Sprite.Draw(mPlayer.Sprite, mPlayer.Position); 
} 

最後渲染,如何渲染一個精靈應該是清楚的,這裏您只需使用set sprite和position。 有很多改進的空間,例如最小化紋理切換,使用alpha處理小精靈,以及最重要的一個正確處理鍵盤。您需要穩定地調整位置,但根據實施方式的不同,運動可能會受到關鍵重複頻率的限制,這可能不是您想要的。