javascript - 单击 html5 Canvas 中的文本

标签 javascript html canvas

如何对 Canvas 进行编程以设置 go = true;在常规 js 中,当您单击 Canvas 上的“播放”一词时?如果 go = true,它开始游戏。此代码将 play 打印到 Canvas 上。 .这是我的 js 代码:

var canvas = document.getElementById("gameCanvas");
var ctx = canvas.getContext("2d");
canvas.width = 800;
canvas.height = 336;


    var go = false;

    var reset = function() {
        //reset function
    };

    var main = function () {
    //main function
    };

    var menu = function () {

        ctx.clearRect (0 , 0 , canvas.width , canvas.height);

        ctx.fillStyle = "rgb(250, 250, 250)";
        ctx.font = "24px Helvetica";
        ctx.textAlign = "left";
        ctx.textBaseline = "middle";
        ctx.fillText("play", 32, 32);
    }

    if (go == true) {
        reset();
        var then = Date.now();
        setInterval(main, 1);
    }
    else {
        menu();
    }

最佳答案

您可以调整的第一件事是这些部分,因为使用 1 毫秒的 setInterval 效果不佳:

var main = function () {
    //main function

   if (go === true) setTimeout(main, 16);
   //use requestAnimationFrame(main) instead, 
};

要检查按钮是否被点击,你可以这样做:

演示:
http://jsfiddle.net/AbdiasSoftware/n8Hsd/

定义文本所在的矩形:

rect = {
    x: 32,
    y: 32,
    w: 70,
    h: 30
};
//this is not proper way to calculate text boundary,
//but for demo's sake.
ctx.fillText("play", rect.x, rect.y + 16);

然后监听 canvas 的点击事件并检查点击的位置是否在该矩形内:

canvas.addEventListener('click', checkStart, false);

function checkStart(e) {
    var p = getMousePos(e);

    if (p.x >= rect.x && p.x <= rect.x + rect.w &&
        p.y >= rect.y && p.y <= rect.y + rect.h) {

        go = !go;
        if (go === true) {
            main();
        } else {
            menu();
        }
    }
}

鼠标位置可以这样计算:

function getMousePos(e) {
    var r = canvas.getBoundingClientRect();
    return {
        x: e.clientX - r.left,
        y: e.clientY - r.top
    };
}

关于javascript - 单击 html5 Canvas 中的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17097892/

相关文章:

javascript - Windows 8 应用程序 - 单点登录应用程序 - 未加入域

javascript - 将数组从 android 传递到 JavaScript

javascript - 如何向 req.body 添加元素?

html - 如何使用 CSS 实现 "knockout"效果?

javascript - 如何在 HTML 中更改 ul 标签 css 的属性

javascript - 将 RGB 一种颜色转换为图像 HTML 5 Canvas 的另一种颜色

node.js - ffmpeg:使用 NodeJS 从 stdin 渲染 webm

javascript - Promise 不解析 node.js

html - Safari + 表格 + 宽度问题

c# - 如何在 WPF 中改变 Canvas 的位置?