博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
laya的skeleton骨骼动画事件响应问题
阅读量:6268 次
发布时间:2019-06-22

本文共 1193 字,大约阅读时间需要 3 分钟。

    创建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

你可能感兴趣的文章
java实现分页工具类(JDBC)
查看>>
欧几里德算法与扩展欧几里德算法
查看>>
Tinkoff Internship Warmup Round 2018 and Codeforces Round #475 (Div. 2)
查看>>
通过kafka提供的命令来查看offset消费情况
查看>>
oracle数据库从入门到精通之四
查看>>
自定义圆形图片控件
查看>>
sharepoint 2013 补丁升级步骤
查看>>
asp.net core 2.0 web api基于JWT自定义策略授权
查看>>
Skype for Business Server 2015-04-前端服务器-3-安装-管理工具
查看>>
第12章代码《跟老男孩学习Linux运维:Shell编程实战》
查看>>
我们为什么从Python转到go?
查看>>
5.Azure负载均衡(上)
查看>>
轻松精通awk数组企业问题案例
查看>>
26.Azure备份服务器(下)
查看>>
从“网上说的能信么”说开去---学习的思考
查看>>
DHCP 日志分析
查看>>
.NET Micro Framework动态调用C/C++底层代码(原理篇)
查看>>
Windows Server 2012正式版RDS系列⒃
查看>>
Shell脚本之awk篇
查看>>
微软发布Azure Stack硬件需求
查看>>