无限滚动带有平铺地图的画布,而无需重新绘制

黑暗的家伙

我已经在游戏引擎中工作了大约6天,从过去的DOS时代开始,我收获了从制作游戏中学到的一切。但是,那时有双重缓冲,您可以以超快的速度重新绘制所有内容。HTML,在HTML5中是另一个故事。

到目前为止,我的引擎具有“层”,这些层是画布在0,0位置彼此叠放的位置,我在屏幕坐标0,0上将它们的上下文绘制在另一层上。这意味着,您将绘制一个图层,然后在渲染阶段绘制该图层(当然,如果满足一些条件)。

我设法建立了一个例程,以便在画布上绘制平铺的地图,并使用->这篇<-文章,通过在每帧上重画来使其滚动。当您使用320x240时,一切正常且花花公子,但是当我将其增加到640x480并将图块数增加一倍时,它的速度会降低。

因此,我想出了这个主意(在此示例中,仅使用水平滚动),方法是使用稍大的画布:

  1. 用所有图块绘制画布,并通过相机的X pos偏移其x位置。
  2. 如果摄像机位置(相对于第一个绘制的图块)> tile_width
    1. 重新绘制整个画布,将1增加到起始的X拼贴,然后
    2. 将画布的X位置重置为零

这样,我只会在每次滚动时重画画布,并且通过一些优化,我什至可以只重画边缘瓦片而不是整个画布(无论如何就是这样)。

所以我的问题是:我将如何在代码中做到这一点?我可能已经连续六天没有为这个引擎工作,但我只是看不到它。另外,还有什么让我更加困惑:如何在不影响画布其余部分的情况下绘制边缘瓷砖?:(

我可以显示一些代码,但是我想我可以使用一个小的jsfiddle示例来做,我可以适应自己的代码。但是,如果您确实需要查看代码,我可能为此准备一个小示例。但是请注意,我的绘图代码只是文章代码的改编版本(用于测试滚动),因此您可以假定我没有编写图块映射代码。我有,但是我敢打赌,对于这种情况xD,我需要重写它。

提前致谢!-黑暗之子

黑暗的家伙

好吧,我终于设法做到了,并解决了自己的问题-但是,它速度更快,但仍然像我以前的尝试一样跳动。如果有人感兴趣,请询问-但由于我什至没有收到任何评论,所以我认为没有人愿意。

这是GameDev的最终工作解决方案

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无限滚动带有平铺地图的画布,而无需重新绘制

来自分类Dev

在画布中绘制平铺地图

来自分类Dev

为什么我的带有平铺地图的pygame游戏落后?

来自分类Dev

根据输入更改传单地图,而无需重新绘制

来自分类Dev

平铺地图中的GID

来自分类Dev

使Libgdx平铺地图变暗

来自分类Dev

平铺地图中的GID

来自分类Dev

如何在pygame中创建二维滚动平铺地图?

来自分类Dev

什么是平铺地图以及如何声明

来自分类Dev

用Java创建平铺地图

来自分类Dev

数组中Java的平铺地图

来自分类Dev

平铺地图未加载某些图像

来自分类Dev

在平铺地图周围创建边界

来自分类Dev

AndEngine动态更改TMX平铺地图

来自分类Dev

Pygame中的非平铺地图

来自分类Dev

Libgdx 平铺地图不透明

来自分类Dev

在html5中的画布内绘制.tmx平铺的地图

来自分类Dev

动态扩展画布,而无需拉伸绘制的内容

来自分类Dev

在Sprite Kit中加载.tmx(平铺地图)吗?

来自分类Dev

使用SDL2渲染平铺地图的最快方法

来自分类Dev

为迷宫创建平铺地图n * n

来自分类Dev

在Sprite Kit中加载.tmx(平铺地图)吗?

来自分类Dev

LIBGDX平铺地图不使用透明度

来自分类Dev

使用 Libgdx 在 Eclipse 上导出平铺地图

来自分类Dev

我的平铺地图未在 libgdx 中呈现

来自分类Dev

平铺地图对象未显示(无错误)

来自分类Dev

在游戏中旋转整个平铺地图 - LibGDX

来自分类Dev

平铺地图未在 HTML5 中呈现

来自分类Dev

Swift创建一个类来绘制平铺地图并将该地图添加到游戏场景