如何渲染2D侧滚动游戏

时间:2010-04-13 03:54:33

标签: rendering 2d

我真的不明白我想要渲染侧卷轴的方式吗?当角色移动时,我怎么知道要渲染什么?我应该为角色使用什么样的位置? 我希望我的问题很清楚

3 个答案:

答案 0 :(得分:1)

我发现最简单的方法是使用characterX和characterY变量[整数或浮点数,无论你想要什么]然后有一个cameraX和cameraY变量。场景中的每个对象都是在ObjectX-cameraX,ObjectY-cameraY ...

中绘制的

CameraX / CameraY通过类似于中点的公式进行补充,因此最终它们将达到playerx / playery [Cx = (Cx*99+Px)/100] ...是的

通过这样做,每个对象都在舞台的空间中移动,并且仅在渲染时进行转换[使您免于头痛]

答案 1 :(得分:0)

  • 使用矩阵定义相机参考框架。
  • 使用空间分区将您的关卡分割为屏幕/窗口。

将您的玩家精灵视为任何其他实体,例如敌人和交互式对象。 现在你想要的是相机的抽象。您可以使用以下布局将摄像机定义为3x3矩阵:

[rotX_X, rotY_X, 0]
[rotX_Y, rotY_Y, 0]
[transX, transY, 1]

左上角的2x2子矩阵是旋转矩阵。 transX和transY定义了翻译部分,即原点。你也可以免费扩展。只需使用标量缩放旋转部分,您就可以自己进行缩放。

为了使旋转正常工作,你的精灵需要是多边形/基元,比如三角形或四边形;你不能只在绘图时将矩阵应用于精灵的位置。如果您不需要旋转,只需转换中心点就可以正常工作。 如果您希望相机跟随播放器,请使用播放器的位置作为相机原点。那是翻译载体[transX,transY] 那么如何将矩阵应用于实体位置和模型顶点?你做一个向量矩阵乘法。 v'= vM ^ -1 ,其中v'是新向量,v是旧向量,M ^ -1是矩阵逆。摄像机需要是逆变换,因为它定义了局部坐标系。一个类比可能是:如果你在我面前,我从我的参考框架左转,我正在向右转。这适用于所有仿射和线性变换,如缩放,旋转和平移。

将您的关卡拆分为子部分,以便您可以剔除不需要渲染的对象和场景。您的视口具有一定的大小/分辨率。仅渲染与视口相交的场景和实体。不是根据视口边界检查每个实体,而是将每个实体分配给某个子屏幕,并根据视口和摄像机边界测试子屏幕的边界。如果将级别划分为与视口大小相同的部分,则可以看到最大屏幕数 在任何特定的时间是:

  • 2如果您的相机仅向左和向右滚动。
  • 4如果您的相机向左,向右,向上和向下滚动。
  • 4如果您的相机向任何方向滚动,并且还可以旋转。

屏幕更改是可用于激活属于该屏幕的实体的事件。这可能是敌人,背景动画,门或任何你喜欢的东西。

答案 2 :(得分:0)

如果这是您第一次尝试编写侧卷轴,我建议您考虑使用现有的游戏引擎(例如ConstructGamemakerXNA或任何适合您的游戏引擎经验水平)因此您不必担心渲染事物的顺序以及如何使其全部工作。稍微混淆一下 - 可能会探索其中的一些 - 以了解他们如何做事,然后一旦你习惯了就冒险出去。 并不是因为火灾的洗礼有什么不妥,但在我看来它会变得非常压倒性。