C#開發WPF/Silverlight動畫及游戲系列教程(Game Course):(二十一)主位式地圖移動模式
是否期待了很久?本節就來個重量級的做為開場白吧:主位式地圖移動模式。何謂主位式地圖移動模式,即以主角為中心,它的移動帶動著所有對象包括地圖、物體對象、其他玩家、怪物等等的相對移動,這些對象的移動都是以主角為參照物的。最典型例子莫過於當前流行的MMORPG了,你控制的角色在地圖中永遠是處於窗口正中心的位置(除了8個角落外),這就是主位式地圖移動模式(如下圖)。
有朋友開始焦躁了:我的媽呀,才剛學完牽引式地圖移動模式,還沒完全吸收呢,又來個什麼鬼主位式地圖移動模式,頭都大冽!
其實一點也不用擔心,一個結構賊清晰的程序只需要您一次輕輕的手術即可以實現功能的革新。是否對謙謙的魔術記憶猶新?神奇的時刻即將降臨,Let me show you the principle first:
游戲窗口尺寸仍然暫定為800 * 600,如上圖,我將游戲地圖(尺寸1750 * 1440)分為9個部分;當主角處於左上(Spirit.X<=400 && Spirit.Y<=390)、右上(Spirit.X>=950 && Spirit.Y<=390)、左下(Spirit.X<=400 && Spirit.Y>=1050)、右下(Spirit.X>=950 && Spirit.Y>=1050)這4個角落區域時,地圖靜止,主角如第九節中的一樣可以任意在窗口中移動,直接講就是主角在窗口中的顯示位置即是它的圖片左上角點(X-CenterX,Y-CenterY);
當主角處於中上(Spirit.X>400 && Spirit.X<950 && Spirit.Y <=390)、中下(Spirit.X>400 && Spirit.X<950 && Spirit.Y >=1050)這2個邊緣區域時,主角在水平方向上始終居中,移動時它在窗口中只會做上下移動,水平方向上通過地圖相對反向移動形成主角水平方向前進的視覺效果;
當主角處於左中(Spirit.>390 && Spirit.Y<1050 && Spirit.X<=400)、右中(Spirit.>390 && Spirit.Y<1050 && Spirit.X>=950)這2個邊緣區域時,主角在垂直方向上始終居中,移動時它在窗口中只會做左右水平移動,垂直方向上通過地圖反向移動形成主角垂直方向前進的視覺效果;
當主角處於正中區域,也就是游戲中主角最多的時候,主角此時始終處於游戲窗口的正中位置(定位到腳底),當它移動時,在窗口中通過地圖的反向移動從而在視覺上形成主角在移動(實際上主角是靜止的,只做方向動畫移動),這與第二十節中的牽引式地圖移動模式有異曲同工之處,只是兩者剛好相反:前者主角不動,地圖反向移動;後者為地圖隨鼠標的牽引而移動,主角不動。最後得出結論:我們只需將第二十節中的AllMove()方法進行修改,即可以實現完美的模式轉換。