我正在與XNA進行一場比賽。 我有我的相機,我的背景和我的滾動類準備去。是否有「If(X增加)」功能?
我唯一缺乏的就是在攝像頭位置發生變化時告訴滾動工作。有沒有對此的聲明?
像:
if (cameraposition.X ""Increases"")
{
Scrolling.Update()
}
感謝。
我正在與XNA進行一場比賽。 我有我的相機,我的背景和我的滾動類準備去。是否有「If(X增加)」功能?
我唯一缺乏的就是在攝像頭位置發生變化時告訴滾動工作。有沒有對此的聲明?
像:
if (cameraposition.X ""Increases"")
{
Scrolling.Update()
}
感謝。
你將不得不跟蹤舊相機的位置,看看它是否改變。所以,你如果是:
if(cameraPosition.X != oldCameraPosition.X)
在您要更新oldCameraPosition可變每一幀的結束,因爲這樣的:
oldCameraPosition = cameraPosition;
兩個位置之間的差別通常被稱爲三角洲,或速度。現在滾動你可以用相機Delta調用你的更新,所以你滾動相同(或修改量)。例如:
//In Camera.cs
Scrolling.Update(oldCameraPosition - cameraPosition);
//In your scrolling class
void Update(Vector3 offset)
{
background.Position += offset * .5f;
}
這樣,每次相機移動時,您的背景平面以一半的速度移動。用不同的修飾符來欺騙3次,你會產生一個paralex效果。
通常情況下,您會希望爲此使用事件,但是可以爲遊戲開發制定例外規定。輪詢通常是要走的路,因爲你已經有一個很像事件循環的遊戲循環。 無論哪種方式,只要首先更改攝像頭的位置,就打電話給Scrolling.Update()
會更有意義。
它的性能自然的選擇,但如果你簡單地說:
Scrolling.Update(cameraPosition.X, cameraPosition.Y)
如果滾動已經在有效位置,不會改變任何東西。
應該在使用前自然測量。通過這種方式,您將避免存儲狀態變量或附加變量來存儲「舊」信息。
一個好的選擇,但如果你想要緩解新的位置,它可能會導致問題。通常情況下,你停下的位置不會與所需的位置完全一樣,所以背景可能會結結塊。 – TJHeuvel
你會要麼必須註冊,以處理在cameraposition或在X值的事件(如果支持的話)或記住舊值和比較。我懷疑可能有事件? – Rup
我真的不知道XNA,但看起來像'CameraPosition.Change'事件。 – phg
請注意遊戲開發中的事件。通常使用輪詢,只需檢查每個幀的期望狀態。 – TJHeuvel