0

(たとえば)マウスクリックで(アーマチュアの)ボーンの名前を取得する方法を誰か教えてください。または、少なくとも as3 コードでボーンのリストを取得する方法。

アイデアをありがとう。

4

2 に答える 2

1

あなたはすでにアーマチュアリンクを持っているようです。IKJoint オブジェクトを返す rootJoint プロパティがあります。次に、通常の for() サイクルを介して、その子を再帰的に渡します。

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

ただし、IK は通常はツリーなので、これを使用するとボーンのレイヤーが 1 つしか得られないため、より深く歩く必要がある可能性が高くなります。そのため、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 に答える