如何让 x 和 y 在控制台中不断更新?
How do I make x and y constantly update in console?
问题说明了一切。我只是想让这个功能发挥作用,让它发挥作用。
如何连续记录 x 和 y 的位置?我试过为它创建一个函数,并将该函数放入 for 循环中。
也许我是新手,不明白我在做什么。这就是为什么我要问你们好人!
这是我的 javascript。不要认为你需要 html 因为这都在 canvas 标签中。
const body = document.body;
let canvas = document.querySelector('#myCanvas');
let c = canvas.getContext('2d');
body.style.overflowX = 'hidden';
canvas.width = window.innerWidth;
canvas.height = 500;
let x = Math.random() * canvas.width;
let y = Math.random() * canvas.height;
let dx = 15;
let dy = Math.random();
let xwidth = 10;
let yheight = 10;
function animatedSquare() {
requestAnimationFrame(animatedSquare);
c.clearRect(0,0,canvas.width, canvas.height);
c.fillRect(x,y,xwidth,yheight);
if(x > canvas.width || x - xwidth < 0) {
dx = -dx;
}
if(y > canvas.height ||y - yheight < 0) {
dy = -dy;
}
x += dx;
y += dy;
}
animatedSquare();
console.log(x,y);
我认为使用 setInterval 应该可以解决您的问题。像这样 setInterval(functionName(arg1,arg2....), 1000);
在这里记录
1000 是毫秒,所以这意味着 1 秒,您可以根据需要更改它。它将 运行 直到您在代码中使用 clearInterval
您可以调用异步函数而不是普通函数
示例:
function resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
async function asyncCall() {
console.log('calling');
const result = await resolveAfter2Seconds();
console.log(result);
// expected output: "resolved"
}
asyncCall();
异步函数文档:
https://sodocumentation.net/javascript/topic/925/async-functions--async-await
如果您不想 运行 为此使用守护程序函数,您应该使用 onmousemove() 事件
只需将 <div>
标记父级添加到 #myCanvas
id 并 onmousemove()
调用一个函数:
<div onmousemove="myFunction()">Move the cursor over me</div>
myFunction()
的示例代码为:
myFunction() => {
let x = Math.random() * canvas.width;
let y = Math.random() * canvas.height;
console.log(x,y);
}
onmousemove() 文档:
https://www.w3schools.com/jsref/event_onmousemove.asp
如果我正确地解释了你的问题,你只需要将最后一行代码,即 console.log(x, y)
,放在你的 animatedSquare()
函数中,例如;
function animatedSquare() {
requestAnimationFrame(animatedSquare);
c.clearRect(0,0,canvas.width, canvas.height);
c.fillRect(x,y,xwidth,yheight);
if(x > canvas.width || x - xwidth < 0) {
dx = -dx;
}
if(y > canvas.height ||y - yheight < 0) {
dy = -dy;
}
x += dx;
y += dy;
console.log(x,y);
}
问题说明了一切。我只是想让这个功能发挥作用,让它发挥作用。 如何连续记录 x 和 y 的位置?我试过为它创建一个函数,并将该函数放入 for 循环中。
也许我是新手,不明白我在做什么。这就是为什么我要问你们好人!
这是我的 javascript。不要认为你需要 html 因为这都在 canvas 标签中。
const body = document.body;
let canvas = document.querySelector('#myCanvas');
let c = canvas.getContext('2d');
body.style.overflowX = 'hidden';
canvas.width = window.innerWidth;
canvas.height = 500;
let x = Math.random() * canvas.width;
let y = Math.random() * canvas.height;
let dx = 15;
let dy = Math.random();
let xwidth = 10;
let yheight = 10;
function animatedSquare() {
requestAnimationFrame(animatedSquare);
c.clearRect(0,0,canvas.width, canvas.height);
c.fillRect(x,y,xwidth,yheight);
if(x > canvas.width || x - xwidth < 0) {
dx = -dx;
}
if(y > canvas.height ||y - yheight < 0) {
dy = -dy;
}
x += dx;
y += dy;
}
animatedSquare();
console.log(x,y);
我认为使用 setInterval 应该可以解决您的问题。像这样 setInterval(functionName(arg1,arg2....), 1000);
在这里记录
1000 是毫秒,所以这意味着 1 秒,您可以根据需要更改它。它将 运行 直到您在代码中使用 clearInterval
您可以调用异步函数而不是普通函数
示例:
function resolveAfter2Seconds() {
return new Promise(resolve => {
setTimeout(() => {
resolve('resolved');
}, 2000);
});
}
async function asyncCall() {
console.log('calling');
const result = await resolveAfter2Seconds();
console.log(result);
// expected output: "resolved"
}
asyncCall();
异步函数文档:
https://sodocumentation.net/javascript/topic/925/async-functions--async-await
如果您不想 运行 为此使用守护程序函数,您应该使用 onmousemove() 事件
只需将 <div>
标记父级添加到 #myCanvas
id 并 onmousemove()
调用一个函数:
<div onmousemove="myFunction()">Move the cursor over me</div>
myFunction()
的示例代码为:
myFunction() => {
let x = Math.random() * canvas.width;
let y = Math.random() * canvas.height;
console.log(x,y);
}
onmousemove() 文档:
https://www.w3schools.com/jsref/event_onmousemove.asp
如果我正确地解释了你的问题,你只需要将最后一行代码,即 console.log(x, y)
,放在你的 animatedSquare()
函数中,例如;
function animatedSquare() {
requestAnimationFrame(animatedSquare);
c.clearRect(0,0,canvas.width, canvas.height);
c.fillRect(x,y,xwidth,yheight);
if(x > canvas.width || x - xwidth < 0) {
dx = -dx;
}
if(y > canvas.height ||y - yheight < 0) {
dy = -dy;
}
x += dx;
y += dy;
console.log(x,y);
}