cocos 实现遥杆移动角色

用到数学知识:1°=π/180°,1rad=180°/π。相似三角形。

1.先实现移动杆的移动

2.限制杆移动的范围,松手回到原来位置(相似三角形定律)

3.通过杆控制人物的移动

4.增加相机跟随

完整工程 https://github.com/nidekunji/cocos-yaogan

如果对你有用请给我个star thank you

  start () {
        //初始化位置。
        this.stick.x = 0;
        this.stick.y = 0;
        //鼠标松手后回到原点
        this.dir = cc.p(0, 0);

        //鼠标按下
        this.stick.on(cc.Node.EventType.TOUCH_START, function (e) {
            
        }, this);

        // e: 底层传给我们的触摸信息对象
        this.stick.on(cc.Node.EventType.TOUCH_MOVE, function (e) {
            // 获取触摸的位置

            var w_pos = e.getLocation();//是世界坐标,左下角
            var pos = this.node.convertToNodeSpaceAR(w_pos);//屏幕坐标转到相对坐标
            var len = cc.pLength(pos);//半径
            this.dir.x = pos.x * 1/ len;//只要就只得出半径为1的点,还是相似三角形定理
            this.dir.y = pos.y * 1/ len;

            /* 好处
            归一化,一个方向,只有一个值;
            this.dir.x = cos(r);
            this.dir.y = sin(r);
            // -1, 1 范围。
            */

            if (len > this.max_r) {//如果大于最大半径,就设置为最大半径的那个点
                pos.x = this.max_r * pos.x / len;
                pos.y = this.max_r * pos.y / len;
            }

            this.stick.setPosition(pos);

        }, this);

        // 在stick的范围内弹起
        this.stick.on(cc.Node.EventType.TOUCH_END, function (e) {
            this.stick.setPosition(cc.p(0, 0))
            this.dir = cc.p(0, 0);
        }, this);

        // 在stick的范围外弹起
        this.stick.on(cc.Node.EventType.TOUCH_CANCEL, function (e) {
            this.stick.setPosition(cc.p(0, 0))
            this.dir = cc.p(0, 0);
        }, this);
    },

猜你喜欢

转载自blog.csdn.net/weixin_41475854/article/details/88675465
今日推荐