我在我的蠕虫般的游戏中实施了一个2d摆锤用于绳索动作,我最初打算使用角度公式,即angleNow = maxAngle * cos( sqrt(g/length) * t)
,但问题是我如何处理绳索中的人的碰撞。现在我正在使用经典力学,我正在计算每一瞬间的向心力centripetal = gravity_constant * cos(speed_angle) + pow(speed,2)/length
。因此,绳索中的人有两条力,一条是重力,另一条是向心,这是变化的所有的时间。我使用公式
deltaVelocity = acceleration * (time - this.lastTime)
计算速度变化,这可能是问题,因为重力三角洲和向心三角洲的更新不一致。
现在的问题是绳索的长度总是在变化,而不是钟摆,绳索倾向于向一侧走很远然后再回来。
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);