laya的skeleton骨骼动画事件响应问题

    创建skeleton节点并绑定MOUSE_DOWN事件后,却始终无法响应。经测试发现如下:

    skeleton节点在load结束后,其bounds反映了总体的宽高,但是width与height却为0,而sprite(skeleton继承自sprite)却是以width与height来作为事件响应区域的。而单纯的sprite结点是没有这个问题的。因此将bounds.width与bounds.height重新赋值给skeleton节点,但是又出现了新的问题。

    调用nodeSkeleton.graphics.drawRect(0, 0, bounds.width, bounds.height, "#ff00ee"),绘制显示区域可以看到,Rect的左上角位置为(bounds.width/2, bounds.height),即在人物脚下中心线的位置。打开dragonbones编辑器,载入对应的动画,发现人物的root节点正是在脚下中心线的位置。也就是说,skeleton节点的动画区域是按照动画编辑器来设定的,与其Laya中的响应区域有很大的偏移。

    为了解决这个问题,创建了一个父节点proxy来响应事件:

var node = new Laya.Skeleton();
var proxy = new Laya.Sprite();
proxy.addChild(node);                
node.load(SkeletonConfigs["NuTao"], Laya.Handler.create(this, function() {
    var bound = node.getBounds(); // 加载完毕之后才能拿到有效的bounds
    var W = bound.width, H = bound.height;
    node.width = W;   // 若不设置的话, node.width与node.height均为0
    node.height = H;
    node.pos(W/2, H); // 骨骼节点偏移(W/2,H),使动画区域的左上角与proxy节点的位置(左上角)重合

    proxy.width = W;
    proxy.height = H;
    proxy.graphics.drawRect(0, 0, proxy.width, proxy.height, "#ff00ffee");
    proxy.on(Laya.Event.MOUSE_DOWN, this, function() {
        console.log("MouseDown Event");
    });
}));

转载于:https://www.cnblogs.com/Jackie-Snow/p/8487607.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值