我的比赛是一个平台的游戏。 我希望玩家移动时,它是从中心X像素的位置,向左或向右移动。
我明白pygame中没有任何让相机的举动。
当玩家已经达到它是X像素远离中心的点,停止播放运动,并具有在相反方向上的移动的地形显示的可移动地形的错觉,表现得象照相机运动。
我的比赛是一个平台的游戏。 我希望玩家移动时,它是从中心X像素的位置,向左或向右移动。
我明白pygame中没有任何让相机的举动。
当玩家已经达到它是X像素远离中心的点,停止播放运动,并具有在相反方向上的移动的地形显示的可移动地形的错觉,表现得象照相机运动。
越来越集中在玩家相机的一个非常基本的方法是只抵消一切,你会画画,所以玩家总是在摄像机的中心。 在我自己的比赛,我用一个函数来转换坐标:
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
你可以只让所谓xscroll的东西被添加到应该在屏幕上滚动的一切。 然后,当你到达距离市中心有一定的距离,而不是将你的球员MOVESPEED自己的位置,您添加或减去从xscroll的MOVESPEED。 这使得一切都非常顺利回到你的角色将移动相同的速度移动。 我在我所有的游戏都使用这一点,我从未有过问题的。
可视化:
视差滚动: http://blog.shinylittlething.com/wp-content/uploads/2009/08/parallax.png (一般具有多个层,该滚动以不同的速度,以示距离)
tilemap的滚动2D: http://mikecann.co.uk/wp-content/uploads/2011/11/tm.png
在纸上画坐标/这些影像有助于可视化的问题。