2017-04-20 79 views
-1

對於我想爲我的班'Pygame決賽做的一個項目,我想製作「塞爾達傳說:一個與過去的聯繫」。然而,當我開始的時候,我意識到滾動會是一個問題。Pygame自上而下滾動

你如何實現跟隨玩家的滾動技術直到地圖或圖像的邊緣,但仍然允許玩家靠近邊緣?

的參考,因爲我覺得如果我沒有正確寫法自己: https://www.youtube.com/watch?v=kWyT9d8CiKY

我個人的想法是利用切換背景圖像移動到鏈接的圖像移動的開關。

回答

1

任何工程分支的主要組成部分都是將大問題分解爲小問題。那麼讓我們來分解你的問題。

你會如何設計出如下玩家 直到地圖或圖像的邊緣滾動的技術,但仍然可以讓玩家移動 靠近邊緣?

好的,所以這裏有三個問題。移動玩家精靈,移動背景精靈,以及確定何時完成每個精靈。移動玩家精靈非常簡單 - 在屏幕上給它一個(x,y)座標,並根據輸入控件(鍵盤/鼠標等)移動它。

現在讓我們考慮背景精靈。爲了簡單起見,我們假設您的整個背景可以作爲一個大精靈加載。我們想要將背景的一部分渲染到屏幕上 - 所以我們需要使用它自己的座標來保持背景相對於屏幕的位置。

您可以考慮這兩種方法 - 屏幕保持靜止,背景移動,或者背景保持不變,屏幕移動。鑑於你最終會追蹤很多其他物品(壞人,寶藏等)以及它們在地圖上的位置,我會建議考慮一切相對於背景移動的東西(儘管起初看起來可能不那麼直觀)。我們稱之爲世界座標。爲了在屏幕上渲染東西,我們需要確定他們的屏幕座標。

好的,所以我們現在有兩個座標 - 屏幕和播放器的位置。爲了一致性,讓我們讓玩家位置也使用世界座標。

那麼我們該如何把它渲染到屏幕上呢?通過列舉出來的規則開始:

  1. 背景應該總是填充整個屏幕(即不迄今 滾動,你可以看到背景精靈外)
  2. 玩家要在屏幕居中,除非這會違反#1

所以屏幕的位置取決於玩家,但有一些限制取決於它在地圖上的位置。讓我們考慮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計算播放器(屏幕上的位置)的渲染位置。背景渲染位置以相同的方式計算(但應產生負座標)。

enter image description here

+0

聖牛,我沒想到這是很有幫助的答覆的。非常感謝你,我可以說出這比我自己的想法更容易實現。現在翻譯這個想法來處理我的代碼!再次感謝! –

+0

沒問題,祝你好運!關鍵是將其分解成最簡單的組件。考慮一下你可以擺脫的最小變量,並從那裏開始。當某些事情看起來很難時,問問自己「我怎樣才能進一步打破這個問題」,然後重複,直到完成任務。 –

+0

我在嘗試移動屏幕時遇到問題,因爲我們無法在不移動背景的情況下真的移動屏幕,對嗎?屏幕是實際的pygame窗口。 –