我怎么会去在pygame中做一个摄像头一样的运动?(How would I go about mak

2019-09-16 18:49发布

我的比赛是一个平台的游戏。 我希望玩家移动时,它是从中心X像素的位置,向左或向右移动。

我明白pygame中没有任何让相机的举动。

当玩家已经达到它是X像素远离中心的点,停止播放运动,并具有在相反方向上的移动的地形显示的可移动地形的错觉,表现得象照相机运动。

Answer 1:

越来越集中在玩家相机的一个非常基本的方法是只抵消一切,你会画画,所以玩家总是在摄像机的中心。 在我自己的比赛,我用一个函数来转换坐标:

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


Answer 2:

你可以只让所谓xscroll的东西被添加到应该在屏幕上滚动的一切。 然后,当你到达距离市中心有一定的距离,而不是将你的球员MOVESPEED自己的位置,您添加或减去从xscroll的MOVESPEED。 这使得一切都非常顺利回到你的角色将移动相同的速度移动。 我在我所有的游戏都使用这一点,我从未有过问题的。



Answer 3:

可视化:

视差滚动: http://blog.shinylittlething.com/wp-content/uploads/2009/08/parallax.png (一般具有多个层,该滚动以不同的速度,以示距离)

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

在纸上画坐标/这些影像有助于可视化的问题。



文章来源: How would I go about making a camera like movement in pygame?