自定义游戏引擎 - 使用2D阵列绘制Zelda地图

时间:2016-10-25 14:02:04

标签: c# game-engine

我现在已经进入游戏开发研究四个月了,我们得到了一个任务,我们必须通过将它们作为位图加载来绘制4个动画角色并绘制一个最初的塞尔达游戏之一的小地图。现在我让动画精灵工作,我对地图不太确定。为了澄清事情,这就是你运行代码时画布应该是什么样子(你看到的精灵是动画的,但显然你不能在图片上看到它):

enter image description here

我们必须使用包含地图所有块的单个spritesheet来绘制地图,您可以通过剪切一小块spritesheet来绘制它:

enter image description here

我们的老师告诉我们,我们应该可以使用2D阵列来做到这一点,但我不知道它是如何工作的。

到目前为止我能够做的是创建一个新的位图并加载位图。然后我用for循环绘制了前两个林行:

for (int i = 0; i < 16; i++)
        {
            GAME_ENGINE.DrawBitmap(Link_Level, 128 + (i * 32), 0, 32, 96, 32, 32);
            GAME_ENGINE.DrawBitmap(Link_Level, 128 + (i * 32), 32, 32, 96, 32, 32);
        }

我知道最简单的方法是逐块绘制地图,但这需要很长时间,我正在寻找一种方法使其适用于2D数组。

任何帮助或建议都将不胜感激!

P.S。我们在Visual Studio 2015中用C#编写这个文件

1 个答案:

答案 0 :(得分:1)

是的,你的老师指的是一个&#34; Block Map&#34;。这是2d阵列。所有这些东西的历史原因是它快速使用汇编程序对块映射中的值进行位移以获取物理地址来读取精灵数据(和写入)。

所以你要做的就是把你的单个spritesheet分成32x32或16x16块。然后你的块映射(2d数组)只是对那些32x32精灵的一组引用。如果你的块映射是16位整数,你可以使用前八位作为Y而下面作为X,然后使用一个按位运算符将x和y引用引入你的精灵映射。

每一帧都绘制整个地图不是你为屏幕制作动画所做的,如果这就是你的意思。在平移屏幕位图时,您只能在屏幕外渲染新的传入行或垂直条。您的可见屏幕始终是比正在渲染的位图小的条形图/行或两条。