我在我的蠕虫类游戏中实现了用于绳索动作的 2d 钟摆,我最初打算使用角度公式,即angleNow = maxAngle * cos( sqrt(g/length) * t)
,但问题在于我如何处理绳索中人的碰撞。现在我使用的是经典力学,我在计算每一瞬间的向心力,centripetal = gravity_constant * cos(speed_angle) + pow(speed,2)/length
所以绳子里的人有两个力,一个是重力,另一个是向心力,一直在变化。我用公式
deltaVelocity = acceleration * (time - this.lastTime)
来计算速度变化,这可能是问题,因为重力增量和向心增量的更新不一致。现在的问题是绳子的长度总是在变化,这不是钟摆,绳子倾向于向一侧走很远然后回来。
顺便说一句,游戏是基于网络的,我正在使用 javascript 来实现它,提前谢谢你。这是我用来计算向心的代码:
this.magnitude = (Math.pow(character.velocityX,2) + Math.pow(character.velocityY,2))/sprite.length;
this.angle = Math.atan(character.velocityY/character.velocityX);
this.delta = GRAVITY_CONSTANT * Math.cos(this.angle);
this.magnitude += this.delta;
character.velocityX += this.magnitude * Math.sin(this.angle) * ((time - this.lastTime) /1000);
character.velocityY -= this.magnitude * Math.cos(this.angle) * ((time - this.lastTime) /1000);