我在场景上加了一层背景和一层精灵层,精灵层加了一个精灵,然后在精灵层动态的加了一层用于点击的点在最上面,点也是精灵类型的对象,在添加精灵点的时候坐标用convertToNodeSpace转成了精灵层的坐标,在精灵点上加了点击监听器,但是在点击精灵点的时候发现点击的坐标并不在精灵点的content范围内,偏移了一定的距离,这是为什么呢?主要代码如下:
//定义了一个精灵点
let PointSprite = cc.Sprite.extend({
ctor:function(resUrl) {
this._super(resUrl);
this.自定义属性1= “”;
this.自定义属性2 = “”;
}
});
// 创建点,坐标经过了转换
let createpointItem = function(x,y){
…
let pointItem =new PointSprite ();
// 场景第二个节点,是精灵层,坐标我都统一以精灵层为基准
let po = .cc.director.getRunningScene().children[1].convertToNodeSpace(new cc.p(x,y));
pointItem.x = po.x;
pointItem.y = po.y;
let mouseEventListener = cc.EventListener.create({
event:cc.EventListener.MOUSE,
onMouseDown:function(event) {
let pos = event.getLocation();
let target = event.getCurrentTarget();
targetSize = target.getContentSize();
let rect = cc.rect(target.x,target.y,targetSize.width, targetSize.height);
let clickPos = cc.director.getRunningScene().children[1].convertToNodeSpace(pos);
if (cc.rectContainsPoint(rect,clickPos)) {
。。。。
}
}
return pointItem ;
}
//精灵层
let cusLayer = cc.Layer.extend({
…
this.addChild(一个精灵);
})
//场景
let cusScene = cc.Scene.extend({
…
//背景层
this.addChild(new cc.LayerColor(cc.color(255,255,255),1000,1000),1);
// 精灵层
this.addChild(new cusLayer(),2);
})
//某个方法中,用场景的第二个子节点,也就是精灵层添加精灵点,在最上面
cc.director.getRunningScene().children[1].addChild(createpointItem() ,10);