分享一段震屏代码

记得以前看过别人写震屏代码的思路
随机圆上一点作为振幅,不断缩小半径降低强度,半径缩小的速率就是阻尼,可以实现各种效果的震动。

2赞

好,顶,赞

mark

mark

mark

Mark、

mark、

mark

mark

mark

mark

研究了一下点的分布规律,看起来没有什么规则,会出现两个问题
1.距离不一,时间固定,则抖动时点与点之间移动速度时快时慢
2.点相对中心有远有近,抖动时会更偏向于距离远的点方向抖动
虽然在快速抖动时比较难注意到

试着将抖动的多个点的之间的距离和角度都固定成一个值了
抖动的路径是在绘制一个正八角星,抖动很规则,比对后个人感觉效果更好一些

var shakeY = 10;//初始震动距离
var sv = cc.v2(0,shakeY);
this.node.runAction(
cc.repeatForever(
cc.sequence(
cc.moveTo(0.02, sv.rotate(Math.PI / 4 * (0 * 3) 8)), cc.moveTo(0.02, sv.rotate(Math.PI / 4 * (1 * 3) 8)),
cc.moveTo(0.02, sv.rotate(Math.PI / 4 * (2 * 3) 8)), cc.moveTo(0.02, sv.rotate(Math.PI / 4 * (3 * 3) 8)),
cc.moveTo(0.02, sv.rotate(Math.PI / 4 * (4 * 3) 8)), cc.moveTo(0.02, sv.rotate(Math.PI / 4 * (5 * 3) 8)),
cc.moveTo(0.02, sv.rotate(Math.PI / 4 * (6 * 3) 8)), cc.moveTo(0.02, sv.rotate(Math.PI / 4 * (7 * 3) 8)),
)
)
);

8个计算后的点是:
(0.00, 10.00),(-7.07, -7.07),(10.00, -0.00),(-7.07, 7.07),(-0.00, -10.00),(7.07, 7.07),(-10.00, 0.00),(7.07, -7.07)

4赞

1234

mark

mark

like it

点赞。…

分享一个

    shakeCamera(camera?: cc.Camera, param?: { times?: number, duration?: number, amp?: number, srcPos?: cc.Vec2 }) {
        camera = camera || cc.Canvas.instance.getComponentInChildren(cc.Camera);
        this.shakeNode(camera.node, param);
    }
    shakeNode(node: cc.Node, param?: { times?: number, duration?: number, amp?: number, srcPos?: cc.Vec2 }) {
        if (!param) {
            param = { times: 6, duration: 0.2, amp: 10 };
        }
        let times = param.times || 6;
        let duration = param.duration || 0.2;
        let amp = param.amp || 10;
        let srcPos = param.srcPos || node.getPosition();
        let destPos = new cc.Vec2();
        let arr: cc.FiniteTimeAction[] = [];
        for (let i = 0; i < times; ++i) {
            if (i == times - 1) {
                destPos.x = destPos.y = 0;
            } else {
                cc.Vec2.random(destPos, amp);
            }
            arr.push(cc.moveTo(duration / times, srcPos.add(destPos)));
        }
        node.runAction(cc.sequence(arr));
    }

image
大佬 这怎么改

将那一句替换为:

let angle = Math.random() * Math.PI * 2;
destPos.x = Math.cos(angle) * amp;
destPos.y = Math.sin(angle) * amp;
1赞