模拟重力摆动效果(源码)

重力摆动

                                         重力摆已在溜溜侠盗中使用,游戏二维码如下:
                                   
上一篇文章
绳子缠绕和解开

溜溜侠盗中,小角色在不受控制时,会有一个受重力和绳子牵引力进行摆动的过程,刚开始我时这么想的

换种思路:

是不是可以通过旋转的角度来计算重力摆的加速度,超出了最低点后,加速度变成负值,速度慢慢变小,小到一定值后开始反向运动。最终出来的效果:

碰到障碍物时

碰到障碍物时不能让重力摆穿透过去,处理方法就很简单了
知道障碍物的位置,计算出来一个重力摆到这个障碍物的角度,当重力摆摆动的角度超过这个时把速度降到0,同时角度取成比当前障碍物角度大点。效果:

好了,代码了:

export default class Pendulum extends cc.Component {
    private gravity:number = 20;
    private len:number = 60;
    private fps:number = 60;
    private velocity:number = 0;
    private angle:number = 80;


    onLoad () {

    }

    start () {

    }

    update (dt) {
        
        let g_segment :number = this.gravity / this.fps;

        // Calculate current angle in radians for use with sin
        let r_angle :number = this.angle * (Math.PI / 180);
        
        // Use our equation to get the additional change to velocity (in degrees, not radians)
        this.velocity += (g_segment / this.len) * Math.sin(r_angle) * (180 / Math.PI);
        this.velocity *= 0.98;
        // cc.log(this.velocity);
        this.getReserver();
        this.setAngle(this.angle - this.velocity);
        
    }

    private getReserver():void
    {
        if (this.angle <= -20) {
            cc.log(this.angle,'xx');
            this.angle = -19;
            this.velocity = 0;
        }
    }

    public setAngle(n :number) :void
    {
        this.node.angle = n;
        this.angle = n;
        // cc.log(this.angle);
    }

QQ交流群:1087682890

2赞

学过动量守恒么……不比你这真实??

请大佬指教

他这是完全非弹性碰撞。写个系数表示弹性应该不难

什么叫三角函数刚好符合这个要求,,,摆本身就是简谐运动

那我用词不恰当了,我修改一下

大佬写一下,指教一下,共同进步

总是跪在屏幕前

大佬, ???

刚好能用上了

碰撞对象挂个脚本里面写碰撞系数,完全弹性碰撞就是速度反向,写-1,完全非弹性碰撞就是0,然后判断相交时取到这个系数

速度取反了, 加速度呢? 加速度不变, 还是会往下走