有人能夠舉例說明如何更改用戶按下鍵盤時繪製的紋理嗎?XNA更改繪圖當玩家使用鍵盤時
基本上我有5個畫面圖像stood still
,up
,down
,left
,right
我的第一次嘗試是使布爾條件的更新的方法,例如如果keys.left
按下左矩形移動,對於拉伸方法繪製人物向左移動,我的問題是他的紋理stood still
在不同方向移動時不會消失並重疊。
我試過其他語句等,但我堅持基本動作。
有人能夠舉例說明如何更改用戶按下鍵盤時繪製的紋理嗎?XNA更改繪圖當玩家使用鍵盤時
基本上我有5個畫面圖像stood still
,up
,down
,left
,right
我的第一次嘗試是使布爾條件的更新的方法,例如如果keys.left
按下左矩形移動,對於拉伸方法繪製人物向左移動,我的問題是他的紋理stood still
在不同方向移動時不會消失並重疊。
我試過其他語句等,但我堅持基本動作。
所以這是很僞代碼,但是這是一個基本的方法如何做到這一點
首先,我們創建類,其中包含關於玩家的我們所有的信息。您還可以添加健康,分數等。
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處理小精靈,以及最重要的一個正確處理鍵盤。您需要穩定地調整位置,但根據實施方式的不同,運動可能會受到關鍵重複頻率的限制,這可能不是您想要的。