作者KanoLoa (諾)
看板GameDesign
標題Re: [程式] 請教一個畫面移動的問題
時間Tue Apr 15 19:19:11 2008
※ 引述《jijuan (naujij)》之銘言:
: 請問假設我有一張底圖的大小是4000x3000
: 那我的螢幕一開始只能顯示其中的一部份
: 如果我要做出當遊戲裡某個物件移動的邊緣時
: 畫面也會跟著移動
: 請問該從哪裡下手呢?
1.場上的物件應該會需要有兩種座標:
a. 顯示於螢幕上的座標 , 用 ScreenX 還有 ScreenY來表示
b. 物件跟底圖之間的關係座標,也是物件彼此之間的座標
可以稱作邏輯座標, 或是世界座標,用 LogicX 和 LogicY表示。
※ 假設螢幕大小為 640 x 480 , 螢幕範圍為 ( 0 至 640 , 0 至 480 )
座標軸最左上為 ( 0 , 0 ) 往右下數值遞增。
2.然後你還需要一個鏡頭,鏡頭只需要邏輯座標,
負責利用邏輯座標差值計算所有物件應該在螢幕上出現的位置。
====================================================================
若是你要追蹤的物件誕生在螢幕中央,且物件一開始就在底圖中央。
則所追蹤物件的座標:
LogicX , LogicY = ( 2000 , 1500 ) //底圖正中央
ScreenX ,ScreenY = 物件邏輯座標 - 鏡頭邏輯座標 + 畫面中心(鏡頭中心點)
= ( 2000 - 2000 + 320 , 1500 - 1500 + 240 )
= ( 320 , 240 ) // 螢幕正中央
底圖的座標:
LogicX , LogicY = ( 0 , 0 )
ScreenX ,ScreenY = 物件邏輯座標 - 鏡頭邏輯座標 + 畫面中心(鏡頭中心點)
= ( 0 - 2000 + 320 , 0 - 1500 + 240 )
= ( -1680 , -1260 ) // 底圖大小為 4000 x 3000
// 螢幕中央剛好為底圖中央
鏡頭邏輯座標 = 追蹤物件一開始邏輯座標 。
狀況1.一般狀況:
物件往右移100像素,未到達畫面移動的條件。
且底圖的位置不會變,單純物件從中央移動到右邊一些。
所以物件的座標:
LogicX , LogicY = ( 2000 + 100 , 1500 )
ScreenX ,ScreenY = 物件邏輯座標 - 鏡頭邏輯座標 + 畫面中心(鏡頭中心點)
= ( 2100 - 2000 + 320 , 1500 - 1500 + 240 )
= ( 420 , 240 ) //螢幕中央,右邊100位置。
狀況2.物件移動超過設定的範圍:
假設在螢幕上,物件能達到最右邊的位置是 ScreenX = 600 ,
物件若是往右移動 300 像素, 320 + 300 > 600 。
物件螢幕位置保持 ScreenX = 600 ,底圖開始左移。
程式碼:
物件向右移動(){
物件LogicX += 物件向右位移量 ;
if ( 物件的LogicX > 鏡頭的LogicX +280 ) //600 -320 = 280
鏡頭LogicX += 物件向右移動的位移量 ;
}
// 當物件邏輯座標 跟 鏡頭邏輯座標 差超過 280 的時候,
// 物件繼續移動的位移量,鏡頭邏輯座標也要一起加上去。
// 例子中,鏡頭的座標會因為差超過 280 ,多加了 20 變為 2020 。
物件座標:
LogicX , LogicY = ( 2000 + 300 , 1500 )
ScreenX ,ScreenY = 物件邏輯座標 - 鏡頭邏輯座標 + 畫面中心(鏡頭中心點)
= ( 2300 - 2020 + 320 , 1500 - 1500 + 240 )
= ( 600 , 240 ) //螢幕600位置。
地圖座標:
LogicX , LogicY = ( 0 , 0 )
ScreenX ,ScreenY = 物件邏輯座標 - 鏡頭邏輯座標 + 畫面中心(鏡頭中心點)
= ( 0 - 2020 + 320 , 0 - 1500 + 240 )
= ( -1700 , -1260 ) //螢幕中心,往左移動20的位置。
=======================================================================
怎麼越打越複雜的感覺 <囧>
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.73.98.74
推 jellyice:good 04/16 20:02
※ 編輯: KanoLoa 來自: 59.104.95.181 (04/16 23:04)
推 jijuan:大推 04/21 09:05