2010-09-28 80 views
1

我可以看到这可能不是一个足够好的问题,但我已经开始构建第一个体面的游戏引擎HTML5 canvas这是跨浏览器,最重要的是快速。唯一的问题是我对游戏设计非常陌生,不知道很多技巧会帮助我。2D游戏设计和优化提示和技巧

我目前正在执行的游戏引擎将被取出的游戏是一个基于2D的成熟平铺贴图(约3500)。我将从我迄今为止学到的一些技巧开始。

  • 重绘区域 - 只重绘改变
  • 避免不必要的函数调用的区域(Firefox不喜欢太多了)
  • 使用DOM,如果你能
  • 大块瓷砖一起更快地访问

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

链接/资源会很好。尤其是物理或重要的数学。

+0

不认为你可以重绘区域,如果你想在画布上滚动......这一直是我的游戏编程经验100%,不是说过去有过的问题。浏览器是一个完全不同的故事。是的,我真的没有什么价值可以在这里提供。您可以使用kd-tree更快地查询“单位”。 – mpen 2010-09-28 01:31:08

+0

是的,这是真的。虽然在我的实现中,当玩家达到屏幕的四分之一时发生滚动。玩家移动和世界滚动的混合。 – Louis 2010-09-28 01:36:39

+0

“地形生成,照明在2D,地图,快速的服务器通信[...]物理或数学的重要” ......这些是巨大的话题,并从游戏中变化很大,完全没有标准或规则来游戏。你要么需要更具体的在每种情况下,或者你需要去购买一些游戏编程的书籍,并通过他们阅读。无论哪种方式,我建议www.gamedev.net/community/forums或gamedev.stackexchange.com更适合于比这里特定游戏的问题。 – Kylotan 2010-09-28 11:28:12

回答

4

只绘制可见的东西,这意味着只绘制当前屏幕上的瓷砖等。对于相当容易的贴图,如果您有很多实体,您可能要使用滑动窗口来保存屏幕本地对象列表或使用像四叉树这样的东西。

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

整个主题是非常广阔,甚至处理FPS率是相当困难的,这个问题包含有关该主题的一些很好的链接和答案:
https://gamedev.stackexchange.com/questions/1589/fixed-time-step-vs-variable-time-step

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

我已经做了一些过去相当简单的2D游戏,其中大部分都不在JavaScript中,但它们都是d给你一些提示:
http://github.com/BonsaiDen/Norum
(在C平台游戏引擎演示,相机带,移动平台)

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

http://github.com/BonsaiDen/NodeGame-Shooter
(2D多人太空射击游戏写在JS,如何使用Node.js服务器的WebSockets和通信)

对于一些最后的话我会说英语新应该从小开始,比如先做一个滚动的瓷砖地图,然后添加一个播放器,然后重写整个事物。你想写出完美的引擎只是从头开始,直到找出所有的怪癖和技巧,它需要许多迭代。

如果你想你应该打开你遇到了麻烦与单一成分的问题更准确的答案。