[英]Create a random circle and then do something once that circle is clicked
我可以很好地创建随机圆,但是我想创建一个圆,单击该圆时,要增加分数并创建一个新圆。
我已经尝试过使用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的值? 任何人:您需要将事件侦听器设置为画布,并记住在创建其所在的圆的创建过程中(请注意,该圆仍然可以作为一个盒子使用,但是应该可以开始使用)
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:现在的工作示例仅在实际圆中发生单击时才触发(又名我为您提供了数学逻辑)
您的circle
变量不是一个具有onClick
属性的DOM元素,它是一个数组-数组以一种非常奇怪的方式使用。
当您执行circle.onclick = function()...
,您只是将一个函数添加到已滥用的数组中,该函数永远不会通过单击来调用。
您需要一种完全不同的方法。 您可以采取多种方式。 其中之一就是制作一个{x: rand_x, y: rand_y, radius}
这样的对象,并将该对象推到存储您创建的所有圆的数组上。
然后在画布上添加一个onclick
函数,这是一个可以接收点击的DOM元素,并让onclick
函数遍历数组(以相反的顺序,因此最近的圆圈优先)检查单击是否在每个圆圈内。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.