你的核心代码如下:
function parseComplete(){
skeleton = templet.buildArmature(1);
skeleton.pos(400,600);
skeleton.on(Laya.Event.MOUSE_DOWN, this, dragFunc);
Laya.stage.addChild(skeleton);
skeleton.play(0,true);
rectangle = skeleton.getBounds();
var hitArea = new Laya.HitArea();
var graphic = new Laya.Graphics();
graphic.drawRect(-rectangle.x, -rectangle.y, rectangle.width, rectangle.height);
hitArea.hit = graphic;
skeleton.hitArea = hitArea;
Laya.stage.graphics.drawRect(-rectangle.x, -rectangle.y, rectangle.width, rectangle.height, "#FFFFFF");
}
通过你的现象,基本上可以判断出。是事件区域出了问题。所以先看一下代码里的事件区域。
通过看代码,可以看出,先通过getBounds方法获得了对象在父容器坐标系的矩形显示区域。然后将获得的X与Y轴以及宽高直接代入到绘制矩形的方法drawRect里,然后把绘制的矩形交给了事件区域。
怎么解决呢?
不要用获得的显示区域的x与y点作为矩形的绘制起点,因为你右下角可以点,说明起点绘制错了嘛,怎么解决呢。起点用宽高的值除一下就行。比如:
graphic.drawRect(-rectangle.width/2, -rectangle.height, rectangle.width, rectangle.height);
你把绘制那行改成这样试试,是不是可以任意位置都可以拖拽了。
当然,一些细节的边边角角,你自己再调一下。
总之你看完这个回答,应该知道是什么问题了。