Javascript 为什么';我的画布动画秀?
我一直在制作一个画布上的圆形动画,该圆形沿随机方向移动,并且每秒钟方向都会发生变化。我通过每秒更改一个速度向量来实现这一点,方法是使用Javascript 为什么';我的画布动画秀?,javascript,css,html,canvas,Javascript,Css,Html,Canvas,我一直在制作一个画布上的圆形动画,该圆形沿随机方向移动,并且每秒钟方向都会发生变化。我通过每秒更改一个速度向量来实现这一点,方法是使用setInterval反复调用一个函数,同时更改圆的中心位置,并使用requestAnimationFrame在另一个函数中绘制圆。结果是一个空画布,我不知道为什么。代码分为以下三个文件: random_ball.html <!DOCTYPE html> <html> <head> <meta charset="utf
setInterval
反复调用一个函数,同时更改圆的中心位置,并使用requestAnimationFrame
在另一个函数中绘制圆。结果是一个空画布,我不知道为什么。代码分为以下三个文件:
random_ball.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Random Ball</title>
<link rel="stylesheet" href="random_ball.css">
</head>
<body>
<canvas id="canvas"></canvas>
<script src="random_ball.js"></script>
</body>
</html>
random_ball.js
html, body{
height: 100%;
width: 100%;
position: absolute;
top: 0;
left: 0;
overflow: hidden;
margin: 0;
padding: 0;
}
canvas{
position: absolute;
width: 50vw;
height: 50vh;
top: 25vh;
left: 25vw;
border-style: solid;
margin: 0;
padding: 0;
}
const canvas = document.getElementById('canvas')
const bounds = canvas.getBoundingClientRect()
const TWO_PI = 2*Math.Pi
const R = 25
const MAX_Y = bounds.height - R
const MAX_X = bounds.width - R
const ctx = canvas.getContext('2d')
function randomInterval(min, max){
return Math.random()*(max - min) + min
}
function randomVelocity(){ // velocity is pixels/sec
VEL.X = randomInterval(-POS.X + R, MAX_X - POS.X)
VEL.Y = randomInterval(-POS.Y + R, MAX_Y - POS.Y)
console.log('VEL: ' + JSON.stringify(VEL))
}
var POS = {X: bounds.height/2, Y: bounds.width/2}
var VEL = {X: 0, Y: 0}
var LAST_TIME = window.performance.now()
function drawCircle(color){
ctx.strokeStyle = color
ctx.beginPath()
ctx.moveTo(POS.X, POS.Y)
ctx.arc(POS.X, POS.Y, R, 0, TWO_PI, true)
ctx.stroke()
}
function draw(timestamp){
var dt = (timestamp - LAST_TIME)/1000
var dx = VEL.X*dt
var dy = VEL.Y*dt
drawCircle('#FFFFFF') // erase the old drawing by making it white
POS.X += dx
POS.Y += dy
//console.log('POS: ' + JSON.stringify(POS))
drawCircle('#000000')
LAST_TIME = timestamp
requestAnimationFrame(draw)
}
randomVelocity()
drawCircle('#000000')
setInterval(randomVelocity, 1000) //change velocity every second
requestAnimationFrame(draw)
我怀疑在旧圆圈上画白色意味着图片变化太快,我看不到它。您可能需要熟悉JavaScript语法规则,可能还需要熟悉JSHint之类的代码检查器 代码的主要问题是引用的是
Math
对象的一个不存在的属性<代码>数学没有Pi
属性。它的拼写是PI
(全部大写)。JavaScript对这些内容区分大小写
下一步:清除画布的一种更常见的做法是使用
ctx.clearRect(0,0,width,height)
。这里有一个JSFiddle来帮助您了解其中的区别:您的控制台中有什么有用的东西可以与我们分享吗?没有,只是速度和位置似乎在正常更新。没有错误消息。哦,我知道它区分大小写。我刚刚看到使用Math.Pi的代码,并假设它是正确的。我改变了,现在我可以看到图纸了,尽管它有点像手推车。我会接受你的回答,自己解决我的其他问题。谢谢你的帮助@Broseph很高兴能提供帮助;快乐编码!