由egret转向cocos creator的记录(二)

虽然cc里有相应的画矩形函数,但是还是喜欢自己搞个自己的库,这样以后调用接口比较一致
 

  /**
 * 绘制线条
 * w:宽度
 * h:高度
 * color:填充色
 * alpha:透明度
 * line:外边线,为0则不绘
 * lineColor:线条色彩
 */
    public static drawRect(w: number, h: number, color: cc.Color = cc.Color.BLACK, alpha: number = 127, line: number = 0, lineColor: cc.Color = cc.Color.BLACK): cc.Node {
        let map = new cc.Node();
        map.width = w;
        map.height = h;
        let graphics = map.addComponent(cc.Graphics);
        color.setA(alpha);
        lineColor.setA(alpha);
        graphics.fillColor = color;
        graphics.strokeColor = lineColor;
        graphics.lineWidth = line;
        graphics.rect(0, 0, w, h);

        // if (line > 0) {

        //     graphics.moveTo(0, 0);
        //     graphics.lineTo(w, 0);
        //     graphics.lineTo(w, h);
        //     graphics.lineTo(0, h);
        //     graphics.lineTo(0, 0);
        // }

        graphics.fill();
        graphics.stroke();

        return map;
    }

    /** 得到两点间的距离 */
    public static distance(p1: cc.Vec2, p2: cc.Vec2): number {
        let dx: number = p1.x - p2.x;
        let dy: number = p1.y - p2.y;
        let distance: number = Math.sqrt(dx * dx + dy * dy);
        return distance;
    }
    /** 弧度 */
    public static radiansAngle = (p1: cc.Vec2, p2: cc.Vec2): number => Math.atan2(p2.y - p1.y, p2.x - p1.x);
    /** 角度  */
    public static degreesAngle = (p1: cc.Vec2, p2: cc.Vec2): number => (Math.atan2(p2.y - p1.y, p2.x - p1.x) * 180) / Math.PI;

 

 用代码添加点击事件,发现新创建的Node ,必须提前设定它的高与宽以及便宜,否则,就没轮动进行点击,也在碰坑之一,简单代码如下:


    public static addTouch(obj: cc.Node): void {

        obj.on(cc.Node.EventType.TOUCH_START, (event: cc.Event.EventTouch) => {
            console.log('TOUCH_START----' + obj.name);
        }, obj);
        //     obj.on(cc.Node.EventType.TOUCH_MOVE, (event: cc.Event.EventTouch) => {
        //         console.log('TOUCH_MOVE' + obj);
        //     }, obj);
        //     obj.on(cc.Node.EventType.TOUCH_END, (event: cc.Event.EventTouch) => {
        //         console.log('TOUCH_END' + obj);
        //     }, obj);
        //     obj.on(cc.Node.EventType.TOUCH_CANCEL, (event: cc.Event.EventTouch) => {
        //         console.log('TOUCH_CANCEL' + obj);
        //     }, obj);
    }

    constructor(_x: number, _y: number, w: number = 82) {
        super();

        /** 下面这几行代码,是我费了一小时搞定,是cocos 的bug,在添加事件的时候,需要空的节点的位置与高度,宽度指定,否则无法执行触摸事件
         * 
            程序员就是用来填坑的,有这么多bug,AI就很难取代程序员

         */
        this.name = "bug啊,bug啊";
        this.anchorX = this.anchorY = 0;
        this.width = w;
        this.height = w;


        this.on(cc.Node.EventType.TOUCH_END, this.runCheck, this);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值