HTML5 游戏(画布)- UI 技术?

2023-11-23

我正在使用 PhoneGap 为移动设备(Android / iPhone / WebOS)构建 JavaScript / HTML5 游戏(使用 Canvas)。我目前正在尝试设计如何构建 UI 和游戏板以及它们如何交互,但我不确定最好的解决方案是什么。这是我能想到的——

  1. 使用诸如drawImage和fillText之类的东西将UI直接构建到画布中
  2. 使用常规 DOM 对象在画布外部构建 UI 部分,然后当 UI 元素需要与游戏板画布重叠时将 div 浮动在画布上。

是否还有其他我没有想到的可能的技术可以用来构建游戏 UI?另外,其中哪一个被认为是“标准”方式(我知道 HTML5 游戏不是很流行,所以可能还没有“标准”方式)?最后,您会推荐/使用哪种方式?

提前谢谢了!

EDIT

我已将这个问题移至 gamedev.stackoverflow.com。您可以在这里找到新问题:https://gamedev.stackexchange.com/questions/7090/html5-game-canvas-ui-techniques/7115#7115


你可以用一百万种方式做到这一点。然而,您感觉最舒服,您的工程师也感觉最自信。

如果您正在寻找灵感或代码示例,这是我的一种方法。我有一个函数可以重复绘制菜单,直到按下按钮为止。按下按钮时,游戏将加载,旧的菜单单击事件侦听器将被删除,并添加新的游戏单击事件侦听器。我还结束了菜单的旧绘制循环并开始新的游戏绘制循环。以下是一些精选的片段,可让您了解其完成方式:

Game.prototype.loadMenu = function() {
  var game = this;
  var can = this.canvas;

  // now we can use the mouse for the menu
  can.addEventListener('click', game.menuClickEvent, false);
  can.addEventListener('touchstart', game.menuClickEvent, false);

  // draw menu
  this.loop = setInterval(function() { game.drawMenu() }, 30);
};

Game.prototype.drawMenu = function() {
  // ... draw the menu
}

Game.prototype.loadLevel = function(levelstring) {
  // unload menu
  var can = this.canvas;
  var game = this;
  can.removeEventListener('click', game.menuClickEvent, false);
  can.removeEventListener('touchstart', game.menuClickEvent, false);

  if (this.loop) clearInterval(this.loop);

  // ... other level init stuff


  // now we can press keys for the game
  //can.addEventListener('click', game.gameClickEvent, false);
  can.addEventListener('touchstart', game.gameClickEvent, false);
  can.addEventListener('keydown', game.gameKeyDownEvent, false);

  this.loop = setInterval(function() { game.tick() }, 30);
}

// called from tick()
Game.prototype.draw = function(advanceFrame) {
  // ...
}

这样我就能够将游戏绘图和游戏事件与菜单绘图和菜单事件分开。如果我想让它们看起来真正漂亮的话,它还给了我在菜单中使用游戏/动画元素的余地。

(我也在双胞胎游戏开发讨论中发布了这个)

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

HTML5 游戏(画布)- UI 技术? 的相关文章

  • Javascript 将对象推送为克隆

    我将 d3 用于交互式网络应用程序 我需要绑定的数据在交互过程中发生变化 并且由 JSON 变量中的一些选定对象组成 为此 我在 JSON 变量上使用了映射 并进行了一些查询来选择适当的对象 对象被推送到列表中 并且该列表被绑定为新数据 我
  • 判断字符串是否包含有效的javascript代码

    我正在寻找一个C 返回的函数true如果字符串包含有效的 JavaScript 语法 例如 IsValidJavascript alert hello 会回来true but IsValidJavascript alertXXhelloZ
  • JavaScript 相当于 Python 的参数化 string.format() 函数

    这是 Python 示例 gt gt gt Coordinates latitude longitude format latitude 37 24N longitude 115 81W Coordinates 37 24N 115 81W
  • Apache Thrift Java-Javascript 通信

    我正在编写一个基于 Apache Thrift 的 Java 服务器 它将从 Javascript 客户端接收数据 我已经完成了 Java 服务器 但问题是我可以获得 Javascript 客户端的工作示例 我无法找到一个好的示例 构建文档
  • EmberJS:对象作为查询参数来刷新模型

    我遵循了查询参数指南 http guides emberjs com v1 11 0 routing query params http guides emberjs com v1 11 0 routing query params 而且效
  • 检查用户设备的 GPS 是否开启

    我正在使用 jQuery Mobile 和 PHP 开发一个应用程序 我没有使用 Phonegap 或其他框架 我需要找到用户的geolocation 如果用户设备的 GPS 关闭 那么我无法获取位置 现在我需要查找用户设备的 GPS 是否
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • .points 不透明度/大小在三个.js 内

    我回来回答有关 points 的第二个问题 这次想知道如何将不透明度从 0 更改为 1 然后又回到距发射器的特定像素距离内 var particleCount 14 particles new THREE Geometry pMateria
  • 使用 float:left 与 display:inline-block 的 jQuery UI 拖放排序比较

    我这里有两个例子 这两个例子之间的唯一区别是 一种使用display inline block 另一种使用float left li doc item 显示 内联块 与 li doc item float left 我的问题是 displa
  • jQuery:将文本区域滚动到给定位置

    我有一个包含很多文本的文本区域
  • Angular 4 Http POST 不起作用

    我希望每个人都做得很好 我最近开始使用 Angular 4 4 我一直在尝试将数据发布到我的 api 服务器 但不幸的是它不起作用 我花了大约两天的时间 但仍然没有成功 甚至已经尝试过 6 7 篇文章角 io https angular i
  • 可以禁用幻灯片的触摸模拟但不能禁用滚动条(危险的滑动器)吗?

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

    我编写了一个带有单独进度的拖放多个文件上传等 除了一件事之外 它工作得非常好 上传较大文件时 有时浏览器会锁定 直到上传完成 我认为这是因为该文件存储在浏览器的内存中并占用了浏览器可用的所有资源 我想知道 是否可以逐段读取文件并在读取时通过
  • 如何从 CSS 选择器中提取类名?

    故事 我目前正在构建一个 ESLint 规则 以警告在 CSS 选择器定位器中使用引导布局导向和角度技术类 目前我在字符串方法中使用简单的子字符串 for var i 0 i lt prohibitedClasses length i if
  • 从网页运行 ClickOnce 应用程序,无需用户操作

    我们有一个基于 Java 的 Web 应用程序以及用 C 编写的相同应用程序 如果 java 检查器发现客户端计算机上没有安装 Java 则应该运行该应用程序 这个想法是运行 C 单击一次 http en wikipedia org wik
  • 如何将MathJax公式转换为img

    Mathjax 现在在我的项目中运行良好 但有一个问题 有没有办法将MathJax的公式 纯html和css 转换成img文件 我可以保存 MathJax 可以配置为生成 SVG 看http docs mathjax org en late
  • javascript - 如何获取对象名称或关联数组索引名称?

    我有一个像这样的 JSON 对象 var list name1 element1 value1 name2 element1 value2 如何提取所有 nameX 字符串值 例如 假设我想将它们连接在一个字符串中输出 例如 name1 n
  • React Redux - 在辅助函数中访问现有存储

    我试图在反应组件之外获取存储实例 存储状态 即在单独的辅助函数中 我有我的减速器 我的动作 我在最上面的组件中创建了一个商店 configStore js import createStore from redux import gener
  • 将引导程序弹出框保留在视口内

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

    我一直在 JavaScript 中使用这个函数来计算阶乘数 var f function factorial n if n 0 n 1 return 1 if f n gt 0 return f n return f n factorial

随机推荐

  • 当我们说 Hashtable 或 Vector 是同步的时,这意味着什么?

    这些问题说明了一切 只是想知道 在面试中 当他们问你 Hashtable 或 Vectors 同步实际上意味着什么 时 你会说什么 实际上它意味着两件事 不要使用它们 除非您要在线程之间共享它们 如果不只是使用 HashMap 或 Arra
  • 有没有办法检查处理器缓存最近是否已刷新?

    在 i386 linux 上 如果可能的话 最好在 c c posix std libs proc 中 如果没有 是否有任何程序集或第三方库可以做到这一点 编辑 我正在尝试开发测试内核模块是否清除缓存行或整个处理器 使用 wbinvd 程序
  • 如何使用 JavaScript / HTML5 创建 .txt 文件?

    我是 javascript 新手 互联网上所有与使用 JavaScript 创建文本文件相关的代码在我的笔记本电脑上都不起作用 任何人都可以给我想法或可能的代码 这段代码应该可以工作 请尝试一下 如果这不起作用 则可能是您的浏览器存在问题
  • 检查 ASP.NET CheckboxList 中的多个项目

    我尝试检查 ASP NET CheckboxList 中的多个值 但我做不到 我写 chkApplications SelectedValue 2 chkApplications SelectedValue 6 但它只选择值为 6 的项目怎
  • Tensorflow Dataset.from_generator 失败并出现 pyfunc 异常

    我正在根据需要尝试tensorflow的nightly 1 4Dataset from generator将一些可变长度的数据集拼接在一起 这个简单的代码 想法来自here import tensorflow as tf Dataset t
  • Kubectl 仅获取工作节点

    是否有任何快捷方式或 kubectl 命令或 REST API 调用来仅获取工作节点列表 不包括主节点 Update 对于高手我们可以这样做 kubectl get nodes selector node role kubernetes i
  • 通过r更新postgresql数据库中的表

    如何通过 R 使用新数据更新 postgresql 数据库中的数据 我试过了 dbGetQuery con UPDATE table SET column1 1 column2 2 column3 3 where id 4 data Rda
  • JasperReports 5.6:无法加载以下字体

    我面临的问题是贾斯珀报告仍然找不到 Arial 字体 我创建了一个具有以下结构的简单 Maven 项目 并将其包含到我的主应用程序中 因此主应用程序在类路径中包含已安装的 JAR jasperreports extension proper
  • 限制Python导入的范围

    我有一些代码看起来像这样 from pyparsing import Word alphas Optional Do stuff And at the end save a result to the outside world parse
  • 通过 ADO.NET 检索 SET STATISTICS IO 和 SET STATISTICS TIME 值?

    通过 Management Studio 执行 T SQL 查询时 我可以使用SET STATISTICS IO ON and SET STATISTICS TIME ON捕获查询优化的统计信息 当我使用 NET 客户端 API 执行 T
  • 如何在 C++ 中将 yuy2 转换为 BITMAP

    我正在使用安全摄像头 DLL 从摄像头检索图像 DLL 调用我的程序的函数 将图像缓冲区作为参数传递 但图像是 yuy2 格式 我需要将此缓冲区转换为 RGB 但我尝试了在互联网上找到的每个公式 但没有成功 我尝试过的每个例子 包括http
  • XCode 4 中的“合并高分辨率艺术作品”?

    在 XCode 4 中 当处理 iOS 项目时 也许 XCode 3 中也有 只是我没有注意到 构建设置下有一个名为 组合高分辨率图稿 的字段 可以将其设置为是或否 这个设置具体有什么作用呢 来自 Xcode 的快速帮助 合并高分辨率图稿
  • Intellij 15 + Github - 无法克隆存储库,出现“存储库测试失败”错误

    我有 Intellij 15 和一个 Github 帐户 我正在尝试将两者结合起来 我进入设置 gt 版本控制 并添加了 Github 以及主机 用户名和密码 当我单击 测试 时 它起作用了 我还安装了 GitHub 可执行文件 并将其添加
  • 如何在 ggplot 命令中激活两个不同的scale_fill_manual

    这个问题源于我的较早的一个关于ggplot2中的背景颜色 从那里的答案 我现在可以使用geom rect为我的情节提供五种不同颜色的背景 最重要的是 我想绘制一个使用两种不同颜色的条形图 我可以单独完成这些任务中的每一个 但是当我尝试将它们
  • 错误:灵活数组成员不在结构末尾

    我的结构如下所示 typedef struct storage char data int lost index int lost index size int size int allowed memory key size int al
  • 为什么SetupDiCallClassInstaller函数仅限于64位程序?

    尝试从以 32 位模式编译的程序调用 SetupDiCallClassInstaller 在 64 位 Windows 上失败 显然这是设计使然 但我想知道原因 根据 MSDN 64 位系统上的设备安装 32 位版本的应用程序必须检查 Up
  • Eclipse:我打开了隐藏角色,现在无法关闭

    不知何故 我在 Eclipse 中打开了隐藏字符 它不是一般编辑器首选项中的 空白 字符 打开后 它会在现有字符的基础上添加另一层隐藏字符 然后我有类似的事情 r n 有谁知道这些是什么以及如何删除它们 它位于 首选项 gt 常规 gt 编
  • UIWebView 中的 Cookie

    我有一个 UIWebView 我不希望它存储 cookie 所以在加载 webview 之前我会这样做 NSArray cookies NSHTTPCookieStorage sharedHTTPCookieStorage cookies
  • C++ 将对象写入文件然后再读入? [复制]

    这个问题在这里已经有答案了 可能的重复 如何在c 中进行序列化 如何在C 中实现序列化 这些天我越来越多地使用 C 并且目前只对 ofstream 有过一些体验 大多数上述经验都是对变量进行简单的文件输出并使用 ifstream 读回它们
  • HTML5 游戏(画布)- UI 技术?

    我正在使用 PhoneGap 为移动设备 Android iPhone WebOS 构建 JavaScript HTML5 游戏 使用 Canvas 我目前正在尝试设计如何构建 UI 和游戏板以及它们如何交互 但我不确定最好的解决方案是什么