使用基于时间的移动获得起伏的移动
Getting choppy movement using time-based movement
我使用基于时间的移动,但它仍然非常波动。该代码在空中发射箭头,然后计算移动的差异,以确定箭头的旋转。它大部分时间都有效,但有时只是抖动。
for(i=0;i<this.arrows.length;i++){
a = this.arrows[i];
point0 = [a.x,a.y];
x_speed = e.delta/1000*a.speed * Math.cos(a.angle * Math.PI / 180);
y_speed = e.delta/1000*a.speed * Math.sin(a.angle * Math.PI / 180);
a.x += x_speed;
a.y += y_speed;
a.y += a.velocity;
a.velocity += e.delta/1000*this.gravity;
alert(e.delta);
ang = Math.atan2(point0[1]-a.y,point0[0]-a.x);
ang = (ang * (180/Math.PI))+180;
a.rotation = ang;
}
1)我很惊讶你使用了.angle、ang和a.rotation。我猜ang是在for循环之前声明的var,但这里没有问题吗?
2) 可以使用弧度而不是度数来避免转换。
3) 速度与速度之间还有一个问题:当你改变速度(Y上的速度)时,你不会更新速度(线速度)。
•无论如何,有一种更简单的方法:计算速度/位置,就像计算一个移动的规则点一样,然后使用速度矢量计算箭头的末端。
它在这把小提琴上演奏得很好:http://jsbin.com/dexaroriwixo/1/
更新:
var i=0, a=null, delta_ms = 1e-3 * e.delta;
for(i=0;i<this.arrows.length;i++){
a = this.arrows[i];
a.x += delta_ms*a.speedX;
a.y += delta_ms*a.speedY;
a.speedY += delta_ms*this.gravity;
a.speedNorm = Math.sqrt(sq(a.speedX)+sq(a.speedY));
}
绘制:
Arrow.prototype.draw = function(ctx) {
ctx.beginPath();
ctx.moveTo(this.x, this.y);
ctx.lineTo(this.x+ this.length*this.speedX/this.speedNorm,
this.y+ this.length*this.speedY/this.speedNorm );
ctx.strokeStyle = '#F00';
ctx.stroke();
}
"发射"箭头,
Arrow.prototype.launch(initialSpeed, angle) {
this.speedX = initialSpeed * Math.cos(angle);
this.speedY = initialSpeed * Math.sin(angle);
}
相关文章:
- JS-在一段时间后水平移动图像
- JS-移动图像,暂停设置的时间,然后将图像向后移动
- 持续时间的移动UI
- HTML5 音频单击进度条可移动到其他时间
- 玩家移动速度更快,增量时间更长
- 显示当前移动时间(浮动)
- 以可在 Azure 移动服务 (Javascript) 中查询的方式保存日期时间
- jquery 移动版的最佳绑定时间
- HTML5 Phonegap移动应用程序会随着时间的推移而变慢
- 对画布上的移动形状或动画形状应用持续时间
- 检测鼠标实际移动的时间,而不仅仅是页面移动的时间
- DIV在页面加载时随计算机时间移动
- 如何在Javascript/jQuery中获取鼠标移动事件的开始时间
- 移动HTML5应用程序-确定用户的日期/时间偏好
- 移动鼠标时更改视频的时间
- 使用基于时间的移动获得起伏的移动
- 我如何移动一个图像从左到右和从右到左在javascript无限的时间
- Jquery-在特定时间后自动移动滚动条到特定位置
- jQuery移动端输入时间带步
- 当移动时间/日期滑块太快时,Datetimepicker在breezejs / knockout中产生并发保存错误