简单游戏的画布与SVG
Canvas vs SVG for simple games
如果我想构建一个简单的游戏(蛇、跳棋、pacman或其他什么),SVG或Canvas是更好的方法?
我感兴趣的东西:
-
易于实现(Canvas与SVG的学习曲线)。例如,如果SVG的教程和社区支持明显减少,这对我来说至关重要
-
性能(对我来说不是关键,但仍然很重要)
此外,在游戏领域,是否有SVG比Canvas更适合的特定游戏(反之亦然)
需要大量鼠标交互而不需要太多连续动画的游戏(如跳棋或国际象棋,或任何棋盘游戏)更适合SVG,因为您使用的是dom元素。考虑一个简单的按钮悬停,在SVG中,您可以添加事件侦听器,甚至只需在CSS中放置g.button:hover path {fill: blue;}
,它就可以工作了。另一方面,Canvas需要跟踪命中区域,并用Javascript绘制所有内容。
Snake和Pacman更适合画布,你可以用键盘控制一切,在画布上绘画比在SVG中移动元素便宜。canvas有很多优秀的游戏库,impact.js就是其中之一。
解决您的问题:
易用性:如果您熟悉纯JavaScriptDOM操作,SVG就轻而易举了。如果你是一块空白的石板,我会说画布更容易掌握,因为你只是在上面画画
社区支持:游戏画布轻松获胜。有一个强大的SVG社区,但在游戏领域没有。
性能:好坏参半。如果你不掌握一些技巧,画布和SVG都可能很慢。例如,如果在每一帧上重新绘制整个屏幕,那么在画布上从左向右移动一个正方形可能会很不稳定。如果你只是重新绘制改变的区域,那么它是光滑的。SVG可以顺利处理这种情况。但另一方面,如果你想一次为数千个矩形设置动画,画布会平滑地处理它,如果你不将矩形包裹在一个组中并移动组,SVG就会陷入困境。
总而言之,如果你想探索javascript游戏,Canvas可能是一个更好的选择。我用SVG做了三个游戏,最近的一个是http://color.method.ac,但我涉足过画布,我认为它更适合游戏。
- D3在一个调用中绘制不同的SVG形状,没有可见性
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何更改<svg>标记为<img>用js标记
- 锚点元素不't使用svg时,请打开EDGE上的href
- 如何有效地将游戏数据存储在URL查询字符串中
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 使用onclick绘制SVG路径
- SVG/JavaScript:尝试选择和更改多边形点
- Javascript游戏输入失去焦点
- 顺时针旋转Svg元件
- 如何在p5.js中管理多智力竞赛游戏的多个屏幕
- 禁用SVG拖动
- 在select元素中显示highchart dashstyle(svg)
- 在D3.js中,有没有任何方法可以将x和y方向上的滚动事件绑定到平移svg
- 缩放Raphael/SVG容器以适应所有内容
- JavaScript-动态SVG-onload属性-未触发事件
- 设置动画时,SVG/Raphael大圆圈会变形
- 简单游戏的画布与SVG
- SVG在游戏开发中用于地图绘制与地图移动