javascript - 创建一个随机圆圈,然后在单击该圆圈后执行某些操作

标签 javascript onclick html5-canvas

我可以很好地创建随机圆圈,但我希望创建圆圈,然后单击圆圈时,分数会增加并创建一个新圆圈。

我已经尝试使用 addEventListener 但这不起作用,因为它会引发错误,我还尝试使用 circle.onclick = function() {blah} 但这根本没有做任何事情,甚至没有抛出错误。

var canvas = document.getElementById("cnv")
var context = canvas.getContext("2d");

document.getElementById("startGame").addEventListener("click", function() {
    createGameCircle();
});

function createGameCircle() {
    radius = 20;

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

    var circle = [
        context.beginPath(),
        rand_x = Math.random(1) * max,
        rand_y = Math.random(1) * max,
        context.arc(rand_x, rand_y, radius, 0, 2 * Math.PI),
        context.fill(),
        context.closePath()
    ];

    circle;

    circle.onclick = function() {
        score++;
        document.getElementById("score").innerHTML = (score);
        createGameCircle();
    }
}

因此,使用这段代码,当单击圆圈时,我希望再次随机生成一个新圆圈,并添加一个分数。但什么也没发生,也没有抛出任何错误。

最佳答案

您的代码需要一些返工,但它可以工作。

我假设您的代码在某处设置了 max 的值? Anywho:您需要将事件监听器设置为 Canvas ,并记住创建圆的位置(请注意,这仍然可以作为一个框使用,但它应该可以帮助您开始)

var canvas = document.getElementById("cnv")
var context = canvas.getContext("2d");
var elements = [];

document.getElementById("startGame").addEventListener("click", function() {
    createGameCircle();
});

canvas.addEventListener('mousedown', function(e) {
    var x = event.pageX - canvas.offsetLeft,
        y = event.pageY - canvas.offsetTop;
    elements.forEach(function(element) {
            var dx = element.rand_x - x;
            var dy = element.rand_y - y;
            if (dx * dx + dy * dy <= element.radius * element.radius) {
            createGameCircle();
        }
    });
});
function createGameCircle() {

    context.clearRect(0, 0, canvas.width, canvas.height);
    elements.pop();

    var circle = {
        rand_x: Math.random(1) * max,
        rand_y: Math.random(1) * max,
        radius: 20
    };

    elements.push(circle);    

    context.beginPath(),
    context.arc(circle.rand_x, circle.rand_y, circle.radius, 0, 2 * Math.PI),
    context.fill(),
    context.closePath()
}

https://jsfiddle.net/hcqsjzfu/1/用于工作测试

编辑:修正了一个错误 编辑2:工作示例现在仅在实际圆圈中发生点击时触发(又名我为你做了数学逻辑)

关于javascript - 创建一个随机圆圈,然后在单击该圆圈后执行某些操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57326292/

相关文章:

android - 数据绑定(bind) onClick 不起作用

reactjs - React,拖动后如何防止执行点击事件?

javascript - Chartjs 2.x - 重绘图表时数据集颜色发生变化

time - JavaScript 日期构造函数和时区

Javascript 方法 pause() 仅适用于音频元素

javascript - 更改 DIV 中鼠标悬停时的状态栏

javascript - 由 eventlisteners() 创建的 Canvas 上的绘图对象

javascript - 将温度调整为 LAB 色彩空间

javascript - 如何使用 Jasmine.js 监视所需的功能

javascript - 重定向特定选项卡 Firefox 插件