1

逆運動学に問題があります。触手を動かすことができず、理由もわかりません。私は多くの単純なスケルトンを実装して成功しましたが、この場合、私が欠けているものがあるに違いありません。あなたが私を助けてくれることを願っています!

ここに詳細な説明があります:

1.-この画像は私が動かしたい触手を示しています。※「Flup」は、触手と下の円の両方を含むMovieClipです。*触手自体は別のMovieClipです(前述のように「Flup」内)*触手はアーマチュアを所有しています

画像

簡単な動きを作成して開始したいので、この場合は青い骨だけを動かしてみます。

2.- Flupはクラスなので、1つのフレームでインスタンスを作成します

import IllGame.enemy.boss.*;

stage.addEventListener(MouseEvent.CLICK,moveTentacle);

//Creation of the monster and insertion into stage
var flup:Flup=new Flup();
flup.x=300;
flup.y=200;
stage.addChild(flup);

//Moves the tentacle (in this case the blue bone)
//to the click point
function moveTentacle(e:MouseEvent):void{
   flup.moveArmature(mouseX,mouseY);
}

3.- Flupクラス、現時点では非常に単純

package IllGame.enemy.boss{
   import flash.display.MovieClip;

   public class Flup extends MovieClip{
      public function Flup(){

      }

      //Recives the coordinates of the click point
      //"TentacleOne" is the instance name of the tentacle
      public function moveArmature(x:Number,y:Number){
         this.tentacleOne.moves(x,y);
      }
   }
}

4.-次に、触手クラスがあります。このクラスは、Flupが持つすべての触手の父であるため、「TentacleOne」の父です。

package IllGame.enemy.boss{
   import flash.geom.Point;
   import flash.display.MovieClip;
   import fl.ik.*;

   public class Tentacle extends MovieClip{

      //Variables needed for inverse quinematic
      private var armature:IKArmature;
      private var bone:IKBone;
      private var joint:IKJoint;
      private var point:Point;
      private var movement:IKMover;

      private var armatureName:String;
      private var bonesName:String;
      private var bonesNumber:int;

      public function Tentacle(armatureName:String,bonesName:String,bonesNumber:int){
         this.armatureName=armatureName;
         this.bonesName=bonesName;
         this.bonesNumber=bonesNumber;

         armature=IKManager.getArmatureByName(armatureName);
      }

      //This function is supposed to move the 7º bone (the blue one)
      public function moves(x:Number,y:Number){
         bone=armature.getBoneByName(bonesName+"7");
         joint=bone.headJoint;
         movement=new IKMover(joint,joint.position);
         movement.moveTo(new Point(x,y));
      }
   }
}

5.-最後に、TentacleOneクラスは、父親にのみ情報を送信します

package IllGame.enemy.boss
{
   public class FlupTentacleOne extends Tentacle{

      const NUM_BONES:int=7;

      public function FlupTentacleOne(){
         super("Armature_20","ikBoneName",NUM_BONES);
      }
   }
}

長い投稿で申し訳ありませんが、私はこれについて本当にイライラしていて、問題がどこにあるのかわかりません。私を助けようとするすべての人に感謝します。

PS:このコードを実行すると、スケルトン位置のX変数とY変数が変更されますが、視覚的にはアーマチュアは静的に保たれます。

4

0 に答える 0