程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#開發WPF/Silverlight動畫及游戲系列教程(Game Course):(二十一)(2)

C#開發WPF/Silverlight動畫及游戲系列教程(Game Course):(二十一)(2)

編輯:關於C語言

原理就這麼簡單,至於其中的數字是如何得到的,我們只需要預先定義好兩個參數WindowCenterX,WindowCenterY。它們其實就是游戲窗體尺寸的5折(如果有標題欄則需要減去標題欄的高度約20像素),以800*600的窗口模式游戲窗體為例,那麼它的WindowCenterX=800/2 =400,WindowCenterY=(600-20)/2=390,那麼1024*768呢?以此類推。理請了思路,接下來就讓我們來實現主位式地圖移動模式下的AllMove()方法,這裡我以主角位於左上這個區域為例:

private void AllMove() {

if (Spirit.X <= WindowCenterX && Spirit.Y <= WindowCenterY) {

//地圖左上

//所有精靈以主角為參照相對移動

for (int i = 0; i < CarrIEr.Children.Count; i++) {

if (CarrIEr.Children[i] is QXSpirit) {

//假如子控件為精靈類型,則獲取之

QXSpirit spirit = CarrIEr.Children[i] as QXSpirit;

//設置精靈在游戲窗口中的顯示位置

Canvas.SetLeft(spirit, spirit.X - spirit.CenterX);

Canvas.SetTop(spirit, spirit.Y - spirit.CenterY);

//畫家方法,使所有精靈之間的遮擋關系由近及遠

Canvas.SetZIndex(spirit, Convert.ToInt32(spirit.Y);

} else if (CarrIEr.Children[i] is Image) {

//假如是地圖/遮罩

Image Map = CarrIEr.Children[i] as Image;

Canvas.SetLeft(Map, 0);

Canvas.SetTop(Map, 0);

}

}

}

……

}

我們首先判斷主角是否在左上的區域(Spirit.X <= WindowCenterX && Spirit.Y <= WindowCenterY),如果是,那麼我們循環遍歷畫布中的所有子控件,假如某個控件是精靈類型(QXSpirit),那麼我們捕獲它。由於此時主角處於的是地圖左上區域,按我們前面的分析,它在此區域內的顯示位置就是它的坐標減去中心點值(CenterX,CenterY),因為精靈坐標是定位到腳底的,而窗口顯示它的位置時是定位到精靈圖片左上角點的。那麼其他方向以次類推(源碼中有這裡就不再列羅列)。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved