【发布时间】:2016-12-18 12:32:38
【问题描述】:
我知道有很多教程和网站,而且所有内容都在回答“哪个更适合游戏应用程序?”他们都说 SVG 不适合游戏应用,canvas 是。但这让我很困惑。
- 一旦有东西被画到画布上,它就会被遗忘。
- SVG 元素可以在创建后更改,而无需触及游戏中的任何其他视觉项目。
- Canvas 没有内置动画
- SVG 已内置动画
假设我正在制作一个平台游戏。我希望主角以精美的背景穿过舞台。在 Canvas 中,我要么必须重新创建她的整个 hitbox(重新绘制每个移动实体的位置),要么制作一个单独的 canvas 元素并使用 ctxChar, ctxBG, ctxItems 等。另一方面,对于 SVG,它是内置的。我可以甚至只是在她的<use> 标记中放置一个<animate> 标记来更改她的x 位置(或通过js 手动更改它),以及另一个<animate> 标记来更改她的精灵。然后永远不必触摸背景。
至于同时为一堆元素制作动画,我看不出这在 Canvas 中比在 SVG 中快得多。将 svg 元素分组有什么问题?是否比重绘 hitboxes 的背景并为所有实体重绘实体本身要慢?
编辑:我认为我真正的问题不是 SVG 是否可以工作,而是为什么人们认为它不能。
【问题讨论】:
-
您在制作动画时渲染每一帧。无需让画布保持并制作您在 Javascript 中执行的动画。它动画并跟踪所有内容
-
如果您的游戏是 Background + Player + 15 个平台,那么 SVG 和 Canvas 都可以正常工作。根据您的问题的措辞,您倾向于使用 SVG,那么为什么不在 SVG 中粗略地玩一下游戏,看看它是否适合您的编码风格?
-
关于 SVG 的提示:在 Chrome 中“SVG 的 SMIL 动画(
、 等)已被弃用,将被删除。请改用 CSS 动画或 Web 动画。 " -
只是为了记录,SMIL 弃用通知很快是reversed(嗯,在@AgataB 的消息后 5 天),所以 SMIL 没有被弃用。此外,随着微软的技术转变,SMIL 支持是broader than ever
-
2) 这并没有比“我如何让 X 在更短的时间内运行?”更多基于意见。因为这得到了同样多样化和有争议的答案。我的问题是,我能找到的所有先前信息都在说“SVG 很糟糕”,但没有人说明 为什么 它很糟糕,我需要知道。最近的讨论与其说是意见分歧,不如说是一个人缺乏理解。