当前位置: 首页 > 知识库问答 >
问题:

我该如何在pygame中制作一个像照相机一样的动作?

东郭宏深
2023-03-14

我的游戏是一个平台游戏。我希望播放器在距离中心X像素时移动,向左或向右移动。

我知道pyplay没有任何东西可以让相机移动。

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

共有3个答案

洪高阳
2023-03-14

可视化:

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

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

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

佘缪文
2023-03-14

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

端木宏盛
2023-03-14

一个非常基本的方法是让相机对中玩家,只要偏移你画的所有东西,让玩家始终在相机的中心。在我自己的游戏中,我使用一个函数来转换坐标:

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
 类似资料:
  • 问题内容: 问题 如何制作一个Ajax按钮(向上和向下箭头),以便数字可以增加或减少 如何将用户的操作保存到变量NumberOfVotesOfQuestionID 我不确定是否应该对变量使用数据库。但是,我知道还有一种更简单的方法可以节省投票数。 您如何解决这些问题? [编辑] 服务器端编程语言是Python。 问题答案: 这是使用jQuery / Django的肮脏/未经尝试的理论实现。 我们将

  • 我在做一个增强现实项目。当发现图像目标时,ARCamera跟踪目标。我希望相机只移动XZ轴而不影响Y轴。

  • 问题内容: 问题 如何制作一个Ajax按钮(向上和向下箭头),以便数字可以增加或减少 如何将用户的操作保存到变量NumberOfVotesOfQuestionID 我不确定是否应该对变量使用数据库。但是,我知道还有一种更简单的方法可以节省投票数。 您如何解决这些问题? [编辑] 服务器端编程语言是Python。 问题答案: 这是使用jQuery / Django的肮脏/未经尝试的理论实现。 我们将

  • 我是GLM新手,正在尝试编写fps风格的相机类 移动鼠标时是否需要重新计算上方向向量? 然而,在我改变向上向量后,一切看起来都很奇怪 但是当我保持向上向量时我的程序看起来有问题 文件:FPSCAMER。cpp公司 您可以在此处下载源代码和二进制文件 https://docs.google.com/file/d/0B9givuJvSet8ekRReWtRM29ldzg/edit?usp=sharin

  • 当有人加入语音频道时,如何制作一个标记为@角色的discord机器人?示例:@role{user}已加入

  • 问题内容: 如何在NetBeans中为Java程序创建.exe文件? 我环顾四周,可以制作JAR文件,但不能制作exe文件。 问题答案: 看一下JAR包装器,例如Jar2Exe,JSmooth或Launch4j。 他们会将JAR包装在可执行文件中,该可执行文件将启动JVM。