我的游戏是平台游戏。我希望玩家在距离中心 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
可视化:
视差滚动: http: //blog.shinylittlething.com/wp-content/uploads/2009/08/parallax.png(通常有多个图层,以不同的速度滚动,以显示距离。)
2d tilemap 滚动: http ://mikecann.co.uk/wp-content/uploads/2011/11/tm.png
在纸上绘制坐标/这些图像有助于可视化问题。
您可以制作一个名为 xscroll 的东西,将其添加到应该在屏幕上滚动的所有内容中。然后,当您从中心到达一定距离时,您不会将玩家的 movespeed 添加到他的位置,而是从 xscroll 中添加或减去 movespeed。这使得一切都以您角色移动的相同速度非常顺利地向后移动。我在我所有的游戏中都使用它,我从来没有遇到过问题。