Texture2D 對象。
我們的投影坐標減去精靈寬度和高度的一半;這將使精靈在飛船上正好居中。
紋理的源大小。
增加精靈現有顏色的顏色。(我們將它構造為 Vector4,其中三個分量表示紅色、綠色和藍色,第四 個分量表示 alpha 或不透明性。這些特定值定義了部分透明的綠色;透明性使我們可以看到防護罩下面 的飛船,而不是遮蔽它。)
比例因子。(在此處我們機智地采用剩余防護時間的余弦,這使防護罩的大小隨時間而波動,只是為 了突出圖形效果。)
設置為 None 的精靈效果標志,但是它可用於水平或垂直翻轉精靈。
屏幕深度。如果值為零,則在所有其他對象之上繪制精靈,因此保證在飛船的頂部而不是其下面進行 呈現。
激發防護罩!
此時,玩家可以建造並顯示防護罩,並在相應的時間段後使防護罩消失。不幸的是,防護罩尚未提供 任何保護。若要獲得該功能,請打開 SpacewarScreen.cs 並添加兩個簡單的代碼塊(為每個玩家添加一 個代碼塊)。轉到 SpacewarScreen.cs 中的第 94 行,並將以下代碼添加到 HitPlayer2 的開頭:
if (ship2.ShIEld)
並將以下內容添加到第 122 行(在 HitPlayer1 的開頭):
{
// Make a bouncy sound rather than an explosion.
Sound.PlayCue( Sounds.WeaponPickup );
return;
}if (ship1.ShIEld)
{
// Make a bouncy sound rather than an
// explosion.
Sound.PlayCue( Sounds.WeaponPickup );
return;
}
如前所述,SpacewarScreen.cs 表示 Spacewar 游戲循環的更新邏輯。許多游戲(包括 Spacewar)對 游戲的各種狀態使用單獨的游戲邏輯循環,如主菜單、武器選擇和實際游戲本身。隨著玩家在游戲中的進 展,在各個狀態之間移交控制。在 Spacewar 中,這些狀態稱為屏幕,由 Screen 類表示。 SpacewarScreen 派生自 Screen,處理實際的游戲進程狀態,在游戲中兩個玩家控制其飛船並進行戰斗。
在 SpacewarScreen 類中,Update 循環管理游戲對象,如在屏幕上漂浮的飛船、武器和小行星。當這 些對象與飛船發生碰撞時,邏輯調用 HitPlayer1 或 HitPlayer2(它們計算對飛船造成的損壞)。
此代碼修改 HitPlayer1 和 HitPlayer2 中的游戲邏輯,以便在飛船受到損壞時,先檢查防護罩再處 理造成的損壞。如果已建立防護罩,則播放變形聲音,而在執行進一步操作之前損壞功能關閉。
整個過程就是這樣的。使用 F5 進行編譯和運行,體驗一下吧!在主菜單中,選擇 Evolved 游戲模式 。啟動游戲後,按 X 按鈕或鍵盤上的等效鍵(F 對於玩家 1,Page Up 對於玩家 2)建立防護罩,如圖 3 所示。兩個玩家在每一回合中都只能使用一次防護罩,但是防護罩是非常堅固的:它可以吸收各種類型 的子彈,小行星撞擊不會造成任何損壞,即使太陽也不能傷害您!
圖 3防護罩已激發!
帶著防護罩在障礙物周圍進行旋轉,但請確保在防護罩用完時(它只能持續 5 秒)您自己不要離太陽 太近!
在此引發的一些想法:使用某個向量數學,可以修改防護罩將子彈彈離而不是將其吸收。這可能意味 著,在對手的子彈反彈回自己時,將是多麼慘痛的突襲!或者修改損壞系統,使防護船在打擊對手時使其 損壞威力加倍!損壞速度驚人!
編寫游戲的快樂體現在實驗中。通過 XNA Game Studio Express,可以很容易地使用各種殺手锏、真 正創造您自己的游戲。