| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- const { ccclass, property } = cc._decorator;
- /** 状态类型 */
- enum StateType {
- /** 出去 */
- out = 0,
- /** 移动中 */
- moving = 1,
- /** 回来 */
- back = 2,
- };
- /**
- * 点击弹出或返回
- * - 节点需要添加按钮组件
- * - 组件会记录移动前的位置,点击后移动配置好的距离,再次点击则返回。
- * - 移动中点击无效
- * @author 薛鸿潇
- */
- @ccclass
- export default class ClickMoveBy extends cc.Component {
- /** 移动的距离 */
- @property({ tooltip: '要移动的距离' })
- private vec_move: cc.Vec2 = cc.Vec2.ZERO;
- /** 当前状态 */
- private state: number = StateType.out;
- /** 是否要返回 */
- private is_back: boolean = false;
- onLoad() {
- this.node.on('click', this.StartMoveBy, this);
- }
- start() {
- if (!this.node.getComponent(cc.Button)) this.node.addComponent(cc.Button);
- }
- /**
- * 开始移动
- * - 移动指定距离 || 返回相反的距离
- * @returns
- */
- StartMoveBy() {
- if (this.state === StateType.moving) return;
- let next_state = 0;
- let temp_vec_move = cc.Vec2.ZERO;
- if (this.state === StateType.out) {
- temp_vec_move = this.vec_move;
- next_state = StateType.back;
- } else if (this.state === StateType.back) {
- temp_vec_move.x = -this.vec_move.x;
- temp_vec_move.y = -this.vec_move.y;
- next_state = StateType.out;
- }
- this.state = StateType.moving;
- let move1 = cc.tween().by(0.5, { position: { value: temp_vec_move, easing: 'backOut' } })
- let call1 = cc.tween().call(() => {
- this.state = next_state;
- })
- cc.tween(this.node).then(move1).then(call1).start();
- }
- // update (dt) {}
- }
|