逆运动学问题

时间:2013-02-17 22:21:54

标签: actionscript-3 flash inverse-kinematics

我有逆运动学的问题。我无法移动触手,我不知道为什么。我实现了许多简单的骨架并取得了成功,但在这种情况下必定会有一些我遗漏的东西。希望你能帮助我!

在这里您有详细的解释:

1.-此图像显示我想要移动的触手。 *“Flup”是一个包含触手和下方圆圈的MovieClip。 *触手本身是另一个MovieClip(如前所述“Flup”内​​) *触手拥有一个电枢

image

我只是想创建一个简单的动作来启动,在这种情况下,我只会尝试移动蓝骨。

2.- Flup是一个类,所以我在一个框架中创建一个实例

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变量,但视觉上骨架保持静止。

0 个答案:

没有答案