看,我不会发布代码因为我需要逻辑,数学,算法。良好:
我正在尝试使用图层和视差滚动来实现自上而下的瓷砖地图的3D外观。问题是:目前我只是为每一层设置不同的“速度”。但这只适用于一些非常特殊的相机位置,它也使得这些块实际上具有无限高度(因为它们将“增加高度”,直到它们离开相机的FOV)。
是否有更好的(应该)达到效果?哦,我正在使用 C 和 Allegro 5 。
我考虑过限制每一层的偏移,但我不知道如何。
我目前的方法:
这是我目前的代码“速度”(它重复上,下,左,右,更改坐标):
if (key[ALLEGRO_KEY_UP])
camera_y[0] -= 1;
camera_y[1] -= 2;
camera_y[2] -= 3;
然后我运行一个循环来绘制相对于当前图层偏移量的图块的地图。
顺便说一下,这是期望的效果(3层的例子):
答案 0 :(得分:4)
对于视差滚动,滚动得更快的图层必须相应更大:
您可以使用堆叠在彼此顶部的未缩放的瓷砖,偏移从瓷砖中心到视口中心的距离的固定部分,
但顶部不会连续(除非底部重叠)。如果所有图层图块都是手绘或渲染图像,则这不是问题。
如果墙壁是盒形的,并且你有顶部和四边的图像,你可以用几乎3D的方式绘制它们,
每个箱壁的最多两侧都是歪斜的。
在所有情况下:
如果视口的中心位于世界坐标(x c ,y c ),则点(x,y,z)将映射到坐标(x', y')相对于视口的中心:
x'=(x - x c )×(z + z 0 )/ z 0
y'=(y - y c )×(z + z 0 )/ z 0
其中z 0 是一个常数,用于确定视差或深度效果的“大小”。
答案 1 :(得分:1)
我认为你是在正确的路线上,但只需给相机一个“海拔”属性就可以解决“无限高度”问题,并通过计算......来调整每一层的“速度”。 p>
layer.speed =(layer.altitude / camera.altitude)* ZOOM_FACTOR; //给出一个浮点值。
在向我们展示一些数学代码之前,无法提出更多建议。