HTML画布以恒定的速度在一个方向上移动一个对象
HTML Canvas moving an object in a direction at a constant speed?
我正在构建pong来学习画布绘制API的一些基础知识。然而,我在一个更基本的让球移动的元素上挣扎。现在,我随机生成一组坐标让它移动,但我不知道如何让它以我选择的恒定速度实际移动到那里。
球以基本速度开始,随着时间的推移变得更快。
那么像这样的东西是如何工作的呢?如何计算球在X轴和Y轴上移动的距离?
我使用canvas创建了一个版本的pong,然后在这里查看它的源代码。
为了制作球的动画,我使用了一个变量来表示x
和y
的速度,一些变量用于表示球的x
和y
坐标,还有一个动画函数使用setInterval()
这是它的一个小样本(减去所有的绘图代码)
velX = 5;
velY = 2;
ballPosX = 100;
ballPosY = 50;
radius = 10;
// loop through 20fps
setInterval(animate,50);
function animate() {
// draw ball at ballPosX, ballPosY coordinates
ctx.arc(ballPosX,ballPosY, radius,0,Math.PI * 180, false)
// fill in colours etc
// move ball
ballPosX += velX;
ballPosY += velY;
// do boundary detection for bounce
if (ballPosX + radius > ctx.width || ballPosX - radius < 0) {
// change velX to negative to bounce the ball the oposite X direction
velX *= -1;
}
// do the same for velY
}
这应该能让你了解它是如何工作的。显然我不能在这里输入整个代码。但如果你去那个链接,你可以看到来源。大部分都被注释了:)
史蒂夫你将有一个地方存储它的速度,并增加它,直到其他力作用于它来改变它的速度/方向(使球反弹的简单方法只是抵消球的运动方向)。
要将元素移动到某物,计算元素与目标之间的距离为x
和y
增量。要移动它,按您选择的速率减小这些值。
你应该使用一个单独的setTimeout()
来绘制所有这些元素。
相关文章:
- jquery脚本只能在一个方向上正常工作
- JQuery后台位置似乎只在一个方向上起作用
- HTML5 JS-我如何使我的子弹/镜头在一个恒定的方向
- 有人能为我指明正确的方向,让一个javascript文件在另一个单独的javascript文件之后运行吗
- 在CSS的未来版本中,仅固定了一个方向的位置
- 使用 JavaScript 触发 CSS 动画淡入和淡出 - 仅适用于一个方向
- 柔性滑动器2在一个方向上继续循环而不工作
- Phaser Box2d-在一个方向上锁定拖动
- jQuery悬停在图像上,一个方向运行良好,另一个方向跳动
- Cordova屏幕锁定方向不是一个功能
- 在一个角度的方向上移动精灵
- 如何在移动应用程序上仅在一个页面上锁定方向
- Nivo Slider滑动解决方案(不总是在一个方向上滑动)
- 让一个箭头指向另一个标记的方向
- HTML画布以恒定的速度在一个方向上移动一个对象
- JQuery图像旋转动画,工作在一个方向,而不是另一个
- 只允许向一个方向拖动ng-drag元素
- 如何使圆形旋转滑块只改变一个方向
- 有没有办法在一个方向上缩放图像
- 仅在一个方向上移动的插件幻灯片