我真的不明白我应该如何渲染侧滚屏?如何知道角色移动时要渲染的内容?我应该对角色使用什么样的定位?我希望我的问题是清楚的。
发布于 2010-04-13 11:57:58
我找到的最简单的方法是让characterX和characterY变量整型或浮点型,然后有一个cameraX和cameraY变量。场景中的每个对象都是在object cameraX,object CameraY...
CameraX/CameraY通过类似于中点的公式进行补间,因此最终它们将到达playerx/playery[Cx = (Cx*99+Px)/100] ...嗯
通过这样做,每个对象都在舞台的空间中移动,并且只在渲染时进行变换,从而避免了令人头疼的问题
发布于 2010-04-14 16:30:35
把你的玩家精灵想象成任何其他实体,比如敌人和交互对象。现在你想要的是相机的抽象。您可以使用以下布局将摄像机定义为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是矩阵的逆。摄影机需要是逆变换,因为它定义了一个局部坐标系。一个类比可以是:如果你在我前面,我从我的参照系向左转,我就会向右转。这适用于所有的仿射和线性变换,如缩放、旋转和平移。
将关卡分成多个子部分,这样你就可以剔除不需要渲染的对象和场景。您的视口具有特定的大小/分辨率。仅渲染与视口相交的场景和实体。不是根据视口边界检查每个实体,而是将每个实体分配到某个子屏幕,并根据视口和相机边界测试子屏幕的边界。如果将级别划分为与视口大小相同的部分,则在任何特定时间可见的最大屏幕数量为:
如果相机只向左和向右滚动,则使用
屏幕更改是可用于激活属于该屏幕的实体的事件。这可能是敌人,背景动画,门或任何你喜欢的东西。
发布于 2010-04-17 12:35:57
如果这是您第一次尝试编写侧滚屏,我建议您考虑使用现有的游戏引擎(如Construct或Gamemaker或XNA或任何适合您经验水平的引擎),这样您就不必担心渲染事物的顺序以及如何使其全部工作。稍微打乱一下--可能是探索其中的几个--去了解他们是如何做事情的,然后一旦你习惯了,就去尝试你自己的。这并不是说用火洗礼有什么错,但在我看来,它可能会变得相当压倒性。
https://stackoverflow.com/questions/2626884
复制相似问题