zoukankan      html  css  js  c++  java
  • 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");
        });
    }));
  • 相关阅读:
    VirtualBox中的网络连接方式详解
    DRUID连接池的实用 配置详解
    redis之如何配置jedisPool参数
    怎么把myeclipse项目导入IDEA中
    最新Hadoop大数据开发学习路线图
    编程能力七段论(下)
    编程能力七段论(上)
    移动无线测试技能树
    WebView加载网页不显示图片解决办法
    编程能力七段论
  • 原文地址:https://www.cnblogs.com/Jackie-Snow/p/8487607.html
Copyright © 2011-2022 走看看