允许用户在 HTML5 Canvas 游戏中输入文本

Posted

技术标签:

【中文标题】允许用户在 HTML5 Canvas 游戏中输入文本【英文标题】:Allowing the user to type text in a HTML5 Canvas game 【发布时间】:2012-11-05 23:22:40 【问题描述】:

我正在尝试结合使用 Canvas 和出色的 KineticJS 库来编写我的第一个 html5 游戏,但我在早期遇到了一些困难。

我想要做的是让用户在游戏中的一个框中输入他们的名字。做了一些研究后,除了在我正在使用的画布的那部分上获取浮动 HTML 元素之外,我看不到任何方法。

这对吗?

在很多 Flash 和网页游戏中长大,我确信每次我必须输入名称或保存文件名时,它都是直接在游戏本身中完成的,它不依赖于 HTML 来生成是吗?

我们将不胜感激地收到有关如何执行此操作的任何建议。

【问题讨论】:

我认为 Kinetic JS 中没有任何开箱即用的功能来添加文本框。请参考 KineticJS 文档:html5canvastutorials.com/kineticjs/… 它将回答您的大部分问题。您需要通过在矩形上的 Key Strokes 上添加事件处理程序来在画布中创建一个文本区域。然后以特定格式在画布中显示从用户接收到的文本。 讨论的是在画布上放置文本,而不是从用户那里获取文本。我已经使用了很多 KineticJS Text 来制作我的按钮,我想要的是一种说法,请输入您的姓名:(将使用 text 属性)然后在 Canvas JS 函数中捕获文本。 我刚刚编辑了我的答案。 Kinetic JS 中没有 HTML 文本区域之类的东西。 抱歉,没有看到您的编辑!将看一下在矩形上捕获击键,然后看看我是否可以通过文本函数将其反馈回来。 【参考方案1】:

您可以使用以下 CSS 技术在画布顶部获取浮动 HTML 元素。

http://css-tricks.com/absolute-positioning-inside-relative-positioning/

制作包装器 div 位置:相对

使用 position: absolute 添加画布

使用 position: absolute 添加其他 HTML 控件

这适用于所有 HTML 元素,而不仅仅是画布。

【讨论】:

老实说,我更像是一个 javascript/Java 程序员而不是 HTML 程序员。所以基本上我现在已经忽略了 CSS(所以文档中没有 是的。诀窍是绝对定位的元素相对于父级。【参考方案2】:

快速而肮脏的方式:

var userInput = prompt('What is your name?');

它有效,但肯定不是最漂亮的方法。 ios 实际上有一个相当不错的提示。

【讨论】:

【参考方案3】:

我知道这有点老了,但是....

Canvas Input 是我在游戏中使用的一个很棒的库:

如您所见,我可以在框中输入内容并将其显示在屏幕上。使用方便:

var input = new CanvasInput(
    canvas: document.getElementById("ctx"),
    x: 0,
    y: 0,
    fontSize: 18,
    fontFamily: 'Arial',
    fontColor: '#212121',
    fontWeight: 'bold',
    width: 200,
    padding: 8,
    borderWidth: 1,
    borderColor: '#000',
    borderRadius: 3,
    onsubmit: function() 
        // your code here for submitting (when user presses enter)
    ,
);

免责声明:我与 CanvasInput 没有任何关系,也没有收到任何关于这篇文章的信息 :)

【讨论】:

以上是关于允许用户在 HTML5 Canvas 游戏中输入文本的主要内容,如果未能解决你的问题,请参考以下文章

如何将 HTML5 Canvas 保存为服务器上的图像?

H5 Canvas 绘图

H5使用Canvas绘图

H5使用Canvas绘图

在 HTML5 Canvas 上绘制形状...带视频

html5 canvas 元素有啥用