0

谁能告诉我如何在(例如)鼠标单击时获取骨骼(在骨架中)的名称。或者至少我如何通过 as3 代码获取骨骼列表。

感谢您的任何想法。

4

2 回答 2

1

你似乎已经有了一个电枢链接。它有一个 rootJoint 属性,该属性返回一个 IKJoint 对象。然后,您通过正常的 for() 循环递归地通过其子代:

var rj:IKJoint=yourArmature.rootJoint;
for (i=rj.numChildren-1;i>=0;i--) {
    trace(rj.getChildAt(i).bone.name);
}

但是,IK 通常是一棵树,所以这样你只会得到一层骨头,所以你很可能需要走得更深。因此,创建一个递归函数,在 IKJoint 有子节点时调用自身。

function getBones(j:IKJoint):void {
    if (j==null) return; // no joint. Seems possible
    if (j.numChildren==0) return;
    for (i=j.numChildren-1;i>=0;i--) {
        var tj:IKJoint=j.getChildAt(i);
        var tb:IKBone=tj.bone;
        if ((tj==tb.headJoint)||(j==tb.headJoint)) getBones(tb.tailJoint);
            else getBones(tb.headJoint); 
        // parse the bone "tb" here
    }
}

然后你从根关节调用它,并将你的列表放在一系列解析中。我希望您不会在单击鼠标时获得骨骼,因为这些实际上是不可见的,您只能获得带有 IK 骨架的 MovieClip 元素。

于 2012-11-02T12:54:52.363 回答
0

我假设您正在寻找 IKManager 类:IKManager

例如像这样的东西(跟踪电枢列表):

for (var i=0; i < IKManager.numArmatures; i++){
    trace(IKManager.getArmatureAt(i).name);
}
于 2012-11-02T11:47:29.353 回答