对于我想为我的班级'Pygame决赛做的项目,我想制作塞尔达传说:过去的链接。然而,当我开始时,我意识到滚动将是一个相当大的问题。
如何实现跟随玩家的滚动技术,直到地图或图像的边缘,但仍允许玩家靠近边缘?
参考,因为我觉得我自己没有正确写字: https://www.youtube.com/watch?v=kWyT9d8CiKY
我个人的想法是使用一个开关切换背景图像移动到Link的图像移动。
答案 0 :(得分:1)
任何工程分支的一个主要组成部分是将大问题分解为较小的问题。所以让我们分解你的问题。
您如何设计跟随播放器的滚动技术? 直到地图或图像的边缘但仍然允许玩家移动 靠近边缘?
好的,这里有三个问题。移动玩家精灵,移动背景精灵,然后确定何时执行。移动玩家精灵非常简单 - 在屏幕上给它一个(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)
您现在可以通过从screen_x
减去player_x
来计算玩家的渲染位置(屏幕上的位置)。背景渲染位置以相同的方式计算(但应该产生负坐标)。