2D游戏设计和优化提示和技巧

时间:2010-09-28 01:27:26

标签: html5

我可以看到这可能不是一个足够好的问题,但我刚刚开始为HTML5 canvas构建第一个体面的游戏引擎,这是跨浏览器,最重要的是快速。唯一的问题是我对游戏设计很陌生,并且不知道很多可以帮助我的交易技巧。

我目前正在实施的游戏将从中取出引擎,这是一款基于磁贴的2D平台游戏,具有多个拼贴(3500左右)。我将从我迄今为止学到的一些技巧开始。

  • 重绘区域 - 仅重绘
  • 的区域
  • 避免不必要的函数调用(Firefox不太喜欢它们)
  • 如果可以
  • 使用DOM
  • 将瓷砖拼接在一起以便更快地访问

我正在寻找的其他东西包括地形生成,2D照明,地图,快速服务器通信。如果这太模糊,我会尝试关闭它。只是想更好地了解游戏设计。

链接/资源会很好。特别是对于物理或重要的数学。

1 个答案:

答案 0 :(得分:4)

仅绘制可见的内容,这意味着只绘制当前在屏幕上的平铺等。对于相当容易的图块,如果你有很多实体,你可能想要使用一个滑动窗口来保存一个屏幕本地对象列表或使用像四叉树这样的东西。

由于没有简单/快速的方法将一个画布复制到另一个画布,因此重绘区域非常复杂,因为如果没有更改,则无法保持(例如)背景的缓冲状态。所以保留一个“脏矩形”列表肯定会是一个计算开销。

整个主题非常广泛,即使处理FPS费率也相当困难,这个问题包含一些关于该主题的良好链接和答案:
https://gamedev.stackexchange.com/questions/1589/fixed-time-step-vs-variable-time-step

你也提到了服务器通信,如果你想做一些多人游戏,你将不得不关心更多的东西,你不能相信客户端,需要担心带宽,同步问题,客户端插值等。

我过去做过一些相当简单的2D游戏,其中大多数都不是用JavaScript,但它们应该给你一些提示:
http://github.com/BonsaiDen/Norum
(C中的平台引擎演示,摄像机区域,移动平台)

http://github.com/BonsaiDen/Tuff
(Java中的2D平台,从未完成,通电和一些很酷的东西)

http://github.com/BonsaiDen/NodeGame-Shooter
(用JS编写的2D多人空间射击游戏,使用Node.js作为服务器,使用WebSockets进行通信)

对于一些最后的单词我会说你应该从小开始,比如先做一个滚动的瓷砖地图,然后添加一个玩家,然后重写整个事情。你想要从头开始编写完美的引擎,它会花费很多次迭代,直到你发现所有的怪癖和技巧。

如果您想要更精确的答案,您应该对遇到麻烦的单个组件提出疑问。