cocoscreator笔记(三)摇杆

cc.Class({
    extends: cc.Component,

    properties: {
        Max_r:100,
    },

    // use this for initialization
    onLoad: function () {
        this.speed = 300 //移动速度
        this.xiao = cc.find('Rocker/xiao') //中间小摇杆
        this.Rocker = cc.find('Rocker')	//摇杆整体
        this.sprite = cc.find('sprite') //角色Role

        this.dir = cc.v2(0,0);

        this.xiao.on(cc.Node.EventType.TOUCH_START,function(e){
            var w_pos = e.getLocation();
            var pos = this.Rocker.convertToNodeSpaceAR(w_pos);//将世界坐标转化为父节点的相对坐标

            var len = pos.mag();

            this.dir.x = pos.x / len;
            this.dir.y = pos.y / len;
            if(len > this.Max_r){
                pos.x = this.Max_r * pos.x / len;
                pos.y = this.Max_r * pos.y / len;
            }
            this.xiao.setPosition(pos);
        },this);

        this.xiao.on(cc.Node.EventType.TOUCH_MOVE,function(e){
            var w_pos = e.getLocation();
            var pos = this.Rocker.convertToNodeSpaceAR(w_pos);//将世界坐标转化为父节点的相对坐标

            var len = pos.mag();
            this.dir.x = pos.x / len;
            this.dir.y = pos.y / len;
            console.log(this.dir.x);
            console.log(this.dir.y);

            if(len > this.Max_r){
                pos.x = this.Max_r * pos.x / len;
                pos.y = this.Max_r * pos.y / len;
            }
            this.xiao.setPosition(pos);
        },this);

        this.xiao.on(cc.Node.EventType.TOUCH_END,function(e){
            this.xiao.setPosition(cc.v2(0,0));
            this.dir = cc.v2(0, 0);
        },this);

        this.xiao.on(cc.Node.EventType.TOUCH_CANCEL,function(e){
            this.xiao.setPosition(cc.v2(0,0));
            this.dir = cc.v2(0, 0);
        },this);



    },

    // called every frame
    update: function (dt) {

        if(this.dir.mag() < 0.5){
            return;
        }
        
        var vx = this.dir.x * this.speed;
        var vy = this.dir.y * this.speed;

        var sx = vx * dt;
        var sy = vy * dt;
        //移动
        this.sprite.x += sx;
        this.sprite.y += sy;
        //方向计算
        var r = Math.atan2(this.dir.y,this.dir.x);
        var degree = r * 180/(Math.PI); 
        degree =  - degree + 90;
        this.sprite.rotation = degree;

    },
});

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值