简单游戏的 Canvas 与 SVG

2024-02-23

如果我想构建一个简单的游戏(贪吃蛇、西洋跳棋、吃豆人或其他游戏),什么是更好的方法 - SVG 还是 Canvas?

我感兴趣的事情:

  1. 易于实施(Canvas 与 SVG 的学习曲线)。例如,如果 SVG 的教程和社区支持明显减少,这对我来说至关重要。

  2. 性能(对我来说并不重要,但仍然很重要)

另外,在游戏领域,是否有 SVG 比 Canvas 更适合的特定游戏(反之亦然?)


需要大量鼠标交互且不需要太多连续动画的游戏(例如跳棋或国际象棋,或任何与此相关的棋盘游戏)更适合 SVG,因为您使用 dom 元素。考虑一个简单的按钮悬停,在 SVG 中您可以添加事件侦听器,甚至只是放置g.button:hover path {fill: blue;}在你的 CSS 中,它就会起作用。另一方面,Canvas 需要跟踪点击区域并用 Javascript 绘制所有内容。

Snake 和 Pacman 更适合画布,您可以用键盘控制一切,并且在画布上绘画比在 SVG 中移动元素便宜。有优秀的画布游戏库,影响.js http://impactjs.com/是其中之一。

解决你的观点:

使用方便:如果您熟悉纯 javascript DOM 操作 SVG 是一件轻而易举的事。如果你是一张白纸,我会说画布更容易掌握,因为你只需在上面绘画即可。

社区支持:对于游戏画布来说,轻而易举地获胜。有一个强大的 SVG 社区,但不在游戏领域。

表现:混合的。如果您不采取一些技巧,canvas 和 SVG 都可能会很慢。例如,如果您在每一帧上重新绘制整个屏幕,则在画布中从左向右移动单个方块可能会很不稳定。如果你只是重新绘制改变的区域,那么它就平滑了。 SVG 可以顺利处理这种情况。但另一方面,如果您想同时为数千个矩形设置动画,canvas 可以顺利处理它,而如果您不将矩形包装在一个组中并移动该组,SVG 就会陷入困境。

总而言之,如果您想用 javascript 探索游戏,也许 Canvas 是更好的选择。我用 SVG 做了三款游戏,最新的一款是http://color.method.ac http://color.method.ac,但我涉足过画布,我认为它更适合游戏。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单游戏的 Canvas 与 SVG 的相关文章

  • Javascript 将对象推送为克隆

    我将 d3 用于交互式网络应用程序 我需要绑定的数据在交互过程中发生变化 并且由 JSON 变量中的一些选定对象组成 为此 我在 JSON 变量上使用了映射 并进行了一些查询来选择适当的对象 对象被推送到列表中 并且该列表被绑定为新数据 我
  • 检测 Webkit/Chrome 中 HTML5 数字控件更改的事件?

    HTML5 为我们提供了一些新的输入元素 例如
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档
  • 如何使用CSS缩放图像以填充div并保持纵横比?

    我想用一个 div 填充img 保持纵横比并根据需要拉伸宽度或高度以适应 div style width 80px height 80px img src div 我怎样才能实现它 如果图像不是二次方的 则必须将其 放大 并根据哪一侧较大而
  • 通过 JavaScript 单击按钮/页面提交

    我想了解 asp net 框架如何知道何时单击了按钮 因此一旦收到请求 就会在服务器上触发其单击事件 我需要了解它是如何工作的 因为我想从 JavaScript 触发按钮的服务器单击事件 我能够从 JavaScript 执行页面提交 doc
  • 使用 float:left 与 display:inline-block 的 jQuery UI 拖放排序比较

    我这里有两个例子 这两个例子之间的唯一区别是 一种使用display inline block 另一种使用float left li doc item 显示 内联块 与 li doc item float left 我的问题是 displa
  • 可以禁用幻灯片的触摸模拟但不能禁用滚动条(危险的滑动器)吗?

    我的页面上有一个危险的滑动器 它成功地模拟了幻灯片和随附滚动条上的触摸事件 允许单击鼠标并移动以向左或向右滑动幻灯片 这很好 但我现在在滑动器内的幻灯片上调用了可拖动 这意味着我需要停止此触摸模拟 拖动幻灯片并同时移动它们会引起混乱 但仅限
  • 从链接打开本地文件夹

    如何通过单击任何链接打开本地文件夹视图 我尝试了很多选择 例如 a href Open folder a or a Open folder a or a Open folder a 解决方案 启动可下载链接 以下内容适用于所有浏览器 但一如
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 了解 Document.createElement()

    我在用着GWT及其底层DOM能力 我基本上想要实现的是 Have a div包含一些文本的元素 其中一些文本将被包围span元素 span 元素可相互拖动并提供上下文菜单 New span元素可以由最终用户动态创建 它可能是这样的 在应用程
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • Google 地图 API - 地图未显示 - 没有错误

    我正在尝试将地图从 Google API 加载到 div 中 但是 地图未加载 并且没有输出任何错误 这是代码 google maps var geocoder map function codeAddress address geocod
  • 使用flex-basis控制行上显示的项目数

    我想在使用 Flex 时将元素推出以隐藏它们 例如 如果flex basis为 50 仅显示两个项目弯曲到给定空间 而其他元素则在overflow hidden 领土 Or if flex basis为 25 则仅显示 4 个 Flex 元
  • vuejs中如何获取组件编译后的html内容

    我有一个这样的组件
  • 为什么这些内联块元素会产生额外的宽度?

    这是这个问题的后续内容 仅使用 css 自动调整图像下的文本 https stackoverflow com questions 34185547 autofit text under image with only css 为什么这段代码
  • onPress 方法中箭头函数与普通函数的行为

    正在学习 Native React 并学习更多关于 javascript 的知识 所以我仍然不明白它的行为的很多事情 我使用 TouchableOpacity 及其 onPress 属性创建了一个按钮组件 为了让它工作 我必须发送我想要执行
  • Three.js点击单个粒子

    In this example http jsfiddle net agqq96bq 2 您可以看到 2 个可点击的粒子 但它们都受到点击的影响 另外 我只想检测粒子上的点击 而不将它们过滤出场景 像这儿 if intersects len
  • Graphql 将多个查询合并(组合)为一个?

    我正在尝试使用 JavaScript 将多个 GraphQL 查询合并为一个查询 我正在寻找这样的东西 let query3 mergeQueries query1 query2 我们事先不知道哪些查询将被组合 假设我有这样的查询 输入查询
  • 将 html 文本框的值分配给 div 的标题

    line 1
  • 将引导程序弹出框保留在视口内

    我正在尝试使用带有按钮的侧边栏创建一个菜单 每个按钮都有一个指定的包含相关数据的弹出窗口 不幸的是 其中一个弹出窗口可能包含任意数量的行 并且在某些情况下它可能部分位于视口之外 See http jsfiddle net bfd9f 1 h

随机推荐