虽然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);
}