對於我想爲我的班'Pygame決賽做的一個項目,我想製作「塞爾達傳說:一個與過去的聯繫」。然而,當我開始的時候,我意識到滾動會是一個問題。Pygame自上而下滾動
你如何實現跟隨玩家的滾動技術直到地圖或圖像的邊緣,但仍然允許玩家靠近邊緣?
的參考,因爲我覺得如果我沒有正確寫法自己: https://www.youtube.com/watch?v=kWyT9d8CiKY
我個人的想法是利用切換背景圖像移動到鏈接的圖像移動的開關。
對於我想爲我的班'Pygame決賽做的一個項目,我想製作「塞爾達傳說:一個與過去的聯繫」。然而,當我開始的時候,我意識到滾動會是一個問題。Pygame自上而下滾動
你如何實現跟隨玩家的滾動技術直到地圖或圖像的邊緣,但仍然允許玩家靠近邊緣?
的參考,因爲我覺得如果我沒有正確寫法自己: https://www.youtube.com/watch?v=kWyT9d8CiKY
我個人的想法是利用切換背景圖像移動到鏈接的圖像移動的開關。
任何工程分支的主要組成部分都是將大問題分解爲小問題。那麼讓我們來分解你的問題。
你會如何設計出如下玩家 直到地圖或圖像的邊緣滾動的技術,但仍然可以讓玩家移動 靠近邊緣?
好的,所以這裏有三個問題。移動玩家精靈,移動背景精靈,以及確定何時完成每個精靈。移動玩家精靈非常簡單 - 在屏幕上給它一個(x,y)座標,並根據輸入控件(鍵盤/鼠標等)移動它。
現在讓我們考慮背景精靈。爲了簡單起見,我們假設您的整個背景可以作爲一個大精靈加載。我們想要將背景的一部分渲染到屏幕上 - 所以我們需要使用它自己的座標來保持背景相對於屏幕的位置。
您可以考慮這兩種方法 - 屏幕保持靜止,背景移動,或者背景保持不變,屏幕移動。鑑於你最終會追蹤很多其他物品(壞人,寶藏等)以及它們在地圖上的位置,我會建議考慮一切相對於背景移動的東西(儘管起初看起來可能不那麼直觀)。我們稱之爲世界座標。爲了在屏幕上渲染東西,我們需要確定他們的屏幕座標。
好的,所以我們現在有兩個座標 - 屏幕和播放器的位置。爲了一致性,讓我們讓玩家位置也使用世界座標。
那麼我們該如何把它渲染到屏幕上呢?通過列舉出來的規則開始:
所以屏幕的位置取決於玩家,但有一些限制取決於它在地圖上的位置。讓我們考慮x
座標(注意這是未經測試):
# start by centring the screen on the player
screen_x = player_x - screen_width/2
# limit the screen to within the bounds of the background
if screen_x < 0:
screen_x = 0
if screen_x > (background_width - screen_width):
screen_x = (background_width - screen_width)
您現在可以通過從player_x
減去screen_x
計算播放器(屏幕上的位置)的渲染位置。背景渲染位置以相同的方式計算(但應產生負座標)。
聖牛,我沒想到這是很有幫助的答覆的。非常感謝你,我可以說出這比我自己的想法更容易實現。現在翻譯這個想法來處理我的代碼!再次感謝! –
沒問題,祝你好運!關鍵是將其分解成最簡單的組件。考慮一下你可以擺脫的最小變量,並從那裏開始。當某些事情看起來很難時,問問自己「我怎樣才能進一步打破這個問題」,然後重複,直到完成任務。 –
我在嘗試移動屏幕時遇到問題,因爲我們無法在不移動背景的情況下真的移動屏幕,對嗎?屏幕是實際的pygame窗口。 –