Pygame自上而下滚动

时间:2017-04-20 03:11:30

标签: python pygame

对于我想为我的班级'Pygame决赛做的项目,我想制作塞尔达传说:过去的链接。然而,当我开始时,我意识到滚动将是一个相当大的问题。

如何实现跟随玩家的滚动技术,直到地图或图像的边缘,但仍允许玩家靠近边缘?

参考,因为我觉得我自己没有正确写字: https://www.youtube.com/watch?v=kWyT9d8CiKY

我个人的想法是使用一个开关切换背景图像移动到Link的图像移动。

1 个答案:

答案 0 :(得分:1)

任何工程分支的一个主要组成部分是将大问题分解为较小的问题。所以让我们分解你的问题。

  

您如何设计跟随播放器的滚动技术?   直到地图或图像的边缘但仍然允许玩家移动   靠近边缘?

好的,这里有三个问题。移动玩家精灵,移动背景精灵,然后确定何时执行。移动玩家精灵非常简单 - 在屏幕上给它一个(x,y)坐标,并根据输入控件(键盘/鼠标/等)移动它。

现在让我们考虑一下背景精灵。为简单起见,我们假设您的整个背景可以作为一个大精灵加载。我们想要将一部分背景渲染到屏幕上 - 所以我们需要使用它自己的坐标来保持背景相对于屏幕的位置。

您可以考虑这两种方式 - 屏幕保持静止,背景在其后面移动,或者背景停留并且屏幕移动。鉴于你最终将跟踪许多其他物品(坏人,宝藏等)以及他们在地图上的位置,我建议考虑一切相对于背景移动(尽管这看起来可能不那么直观)。我们称之为世界坐标。要将内容渲染到屏幕上,我们需要计算出它们的屏幕坐标。

好的,我们现在有两个坐标 - 屏幕和播放器的位置。为了保持一致性,让玩家的位置也使用世界坐标。

那么我们如何将其渲染到屏幕上呢?首先列出规则:

  1. 背景应始终填满屏幕(即不要滚动到目前为止 你可以在背景精灵之外看到)
  2. 玩家应该以屏幕为中心,除非那会违反#1
  3. 因此,屏幕的位置取决于播放器,但取决于它在地图上的位置有一些限制。让我们考虑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来计算玩家的渲染位置(屏幕上的位置)。背景渲染位置以相同的方式计算(但应该产生负坐标)。

    enter image description here