分享一段震屏代码

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));
    }
1赞

image
大佬 这怎么改

将那一句替换为:

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

大佬牛批~~

param参数怎么传合适??
{ times?: number, duration?: number, amp?: number, srcPos?: cc.Vec2 }

不传,直接用默认值

1赞

学习了 mark

mark. get it.