cocos-awesome/assets/Scene/Screen_vibrating/Screen_vibrating.ts
2020-04-06 15:10:25 +08:00

53 lines
1.3 KiB
TypeScript

const { ccclass, property } = cc._decorator;
@ccclass
export default class Screen_vibrating extends cc.Component {
@property(cc.Node)
bgNode: cc.Node = null;
@property(cc.Node)
hitFeedback: cc.Node = null;
onLoad() {
this.shakeEffect(this.bgNode, 1);
}
hit(evn: cc.Event.EventTouch) {
this.shakeEffect(evn.currentTarget, 0.6);
this.hitFeedback.setPosition(this.node.convertToNodeSpaceAR(evn.getLocation()));
this.hitFeedback.active = true;
let anim = this.hitFeedback.getComponent(cc.Animation);
anim.on('finished', () => {
this.hitFeedback.active = false;
anim.setCurrentTime(0);
anim.stop();
});
anim.play();
}
shakeEffect(node: cc.Node, duration) {
node.stopAllActions();
node.runAction(
cc
.sequence(
cc.moveTo(0.02, cc.v2(5, 7)),
cc.moveTo(0.02, cc.v2(-6, 7)),
cc.moveTo(0.02, cc.v2(-13, 3)),
cc.moveTo(0.02, cc.v2(3, -6)),
cc.moveTo(0.02, cc.v2(-5, 5)),
cc.moveTo(0.02, cc.v2(2, -8)),
cc.moveTo(0.02, cc.v2(-8, -10)),
cc.moveTo(0.02, cc.v2(3, 10)),
cc.moveTo(0.02, cc.v2(0, 0))
)
.repeatForever()
);
this.scheduleOnce(() => {
node.stopAllActions();
node.setPosition(0, 0);
}, duration);
}
}