我怎样才能在pygame中制作像相机一样的相机?

时间:2012-04-27 00:01:44

标签: python animation pygame

我的游戏是一款平台游戏。我希望玩家在距离中心X像素时移动,向左或向右移动。

据我所知,pygame没有能让相机移动的东西。

当玩家到达距离中心X像素的点时,停止玩家移动并让地形沿相反方向移动以显示可移动地形的错觉,就像摄像机一样运动。

3 个答案:

答案 0 :(得分:0)

将相机置于播放器中心的一种非常基本的方法是将所有绘制的内容都偏移,以便播放器始终位于相机的中心位置。在我自己的游戏中,我使用一个函数来转换坐标:

def to_pygame_coords(coords):
    # move the coordinates so that 0, 0 is the player's position
    # then move the origin to the center of the window
    return coords - player.position.center + window.position.center

要展开它以使其不是绝对定位在播放器上,您可以将窗口置于一个盒子的中心。然后你更新盒子的中心,这样如果玩家离开盒子,盒子就会随身移动(从而移动相机)。

伪代码(未针对负坐标进行测试):

BOX_WIDTH = 320
BOX_HEIGHT = 240
box_origin = player.position.center
def update_box(player_coords):
    if player_coords.x - box_origin.x > BOX_WIDTH:
        box_origin.x = player_coords.x - BOX_WIDTH
    elif box_origin.x - player_coords.x > BOX_WIDTH:
        box_origin.x = player_coords.x + BOX_WIDTH
    if player_coords.y - box_origin.y > BOX_HEIGHT:
        box_origin.y = player_coords.y - BOX_HEIGHT
    elif box_origin.y - player_coords.y > BOX_HEIGHT:
        box_origin.y = player_coords.y + BOX_HEIGHT

def to_pygame_coords(coords):
    # move the coordinates so that 0, 0 is the box's position
    # then move the origin to the center of the window
    return coords - box_origin + window.position.center

答案 1 :(得分:0)

你可以创建一个名为xscroll的东西,它被添加到应该在屏幕上滚动的所有内容中。然后,当您距离中心一定距离时,不是将您的玩家移动到他的位置,而是从xscroll添加或减去移动速度。这使得一切都能以你角色移动的速度非常平稳地移动。我在我的所有游戏中使用它,我从来没有遇到任何问题。

答案 2 :(得分:0)

可视化:

视差滚动:http://blog.shinylittlething.com/wp-content/uploads/2009/08/parallax.png(通常有多个图层,以不同的速度滚动,以显示距离。)

2d tilemap滚动: http://mikecann.co.uk/wp-content/uploads/2011/11/tm.png

在纸上绘制坐标/这些图像有助于可视化问题。