title: Converting AS3 code from mouse to ios Touch event
body: <p>I have written some code to start off my game, i now want to change the controls from mouse to touch event so i can use it on my ipad.</p>
  
  <p>the code below is how far i have got but i can't work out how to change it to work with touch and drag</p>
  
  <pre><code>package {
      import flash.display.Sprite;
      import flash.events.Event;
      import flash.events.MouseEvent;
      import flash.events.TouchEvent;
      import flash.ui.Multitouch;
      import flash.ui.MultitouchInputMode
      import Box2D.Dynamics.*;
      import Box2D.Collision.*;
      import Box2D.Collision.Shapes.*;
      import Box2D.Common.Math.*;
      import Box2D.Dynamics.Joints.*;
  
      public class Main extends Sprite {
  
          private var world:b2World;
          private var worldScale:Number = 30;
          private var mouseJoint:b2MouseJoint;
          Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT;       
  
          var myBlock:Array = new Array(
              new Block(),
              new Block(),
              new Block()
          );
  
  
  
          public function Main() {
  
              addChild(myBlock[0]);
              addChild(myBlock[1]);
              addChild(myBlock[2]);
  
  
  
              world = new b2World(new b2Vec2(0,9.81),true);
              debugDraw();
              var bodyDef:b2BodyDef=new b2BodyDef();
              bodyDef.position.Set(320/worldScale,470/worldScale);
  
              var polygonShape:b2PolygonShape=new b2PolygonShape();
              polygonShape.SetAsBox(320/worldScale,10/worldScale);
  
              var fixtureDef:b2FixtureDef=new b2FixtureDef();
              fixtureDef.friction = 1;
              fixtureDef.restitution = 0.5;
              fixtureDef.shape = polygonShape;
              var groundBody:b2Body = world.CreateBody(bodyDef);
              groundBody.CreateFixture(fixtureDef);
  
              for (var i:int=0; i&lt;3; i++) {
                  createBox(Math.random()*500+70,400,b2Body.b2_dynamicBody);
                  var targetBox:TargetBox=new TargetBox();
                  addChild(targetBox);
                  targetBox.x = 220 + i * 100;
                  targetBox.y = 180;
              }
  
              addEventListener(Event.ENTER_FRAME,updateWorld);
  
              stage.addEventListener(TouchEvent.TOUCH_BEGIN, createJoint); 
          }
          private function createBox(pX:Number,pY:Number,type:int):void {
              var bodyDef:b2BodyDef=new b2BodyDef();
              bodyDef.position.Set(pX/worldScale,pY/worldScale);
              bodyDef.type = type;
              var polygonShape:b2PolygonShape=new b2PolygonShape();
              polygonShape.SetAsBox(30/worldScale,30/worldScale);
              var fixtureDef:b2FixtureDef=new b2FixtureDef();
              fixtureDef.shape = polygonShape;
              fixtureDef.density = 1;
              fixtureDef.friction = 0.5;
              fixtureDef.restitution = 0.2;
              var box:b2Body = world.CreateBody(bodyDef);
              box.CreateFixture(fixtureDef);
          }
          private function createJoint(e:TouchEvent):void {
              world.QueryPoint(queryCallback,mouseToWorld());
          }
          private function queryCallback(fixture:b2Fixture):Boolean {
              var touchedBody:b2Body = fixture.GetBody();
              if (touchedBody.GetType() == b2Body.b2_dynamicBody) {
                  var jointDef:b2MouseJointDef=new b2MouseJointDef();
                  jointDef.bodyA = world.GetGroundBody();
                  jointDef.bodyB = touchedBody;
                  jointDef.target = mouseToWorld();
                  jointDef.maxForce = 1000 * touchedBody.GetMass();
                  mouseJoint = world.CreateJoint(jointDef) as b2MouseJoint;
                  stage.addEventListener(TouchEvent.TOUCH_MOVE, moveJoint);
  
  
                  stage.addEventListener(TouchEvent.TOUCH_END, finish); 
                  stage.addEventListener(TouchEvent.TOUCH_END,killJoint);
              }
              return false;
          }
          private function moveJoint(e:TouchEvent):void {
              mouseJoint.SetTarget(mouseToWorld());
          }
          private function killJoint(e:TouchEvent):void {
              world.DestroyJoint(mouseJoint);
              mouseJoint = null;
              stage.removeEventListener(TouchEvent.TOUCH_MOVE,moveJoint);
              stage.removeEventListener(TouchEvent.TOUCH_END,killJoint);
              stage.removeEventListener(TouchEvent.TOUCH_END,finish);
  
          }
          private function mouseToWorld():b2Vec2 {
              return new b2Vec2(mouseX/worldScale,mouseY/worldScale);
          }
          private function debugDraw():void {
              var debugDraw:b2DebugDraw=new b2DebugDraw();
              var debugSprite:Sprite=new Sprite();
              addChild(debugSprite);
              debugDraw.SetSprite(debugSprite);
              debugDraw.SetDrawScale(worldScale);
              debugDraw.SetFlags(b2DebugDraw.e_shapeBit|b2DebugDraw.e_jointBit);
              debugDraw.SetFillAlpha(0.5);
              world.SetDebugDraw(debugDraw);
          }
          private function finish(e:TouchEvent):void {
              for (var b:b2Body=world.GetBodyList(); b; b=b.GetNext()) {
                  for (var i:int=0; i&lt;3; i++) {
                      var distX:Number = b.GetPosition().x * worldScale - (220 + i * 100);
                      var distY:Number = b.GetPosition().y * worldScale - 180;
  
                      if (distX*distX+distY*distY&lt;900 &amp;&amp; b.GetType()==b2Body.b2_dynamicBody) {
  
                      world.DestroyBody(b);
                      createBox(220 + i * 100,180,b2Body.b2_staticBody);
                      }   
  
                  }
              }
  
  
          }
  
          private function updateWorld(e:Event):void {
              world.Step(1/30,10,10);
              world.ClearForces();
  
                  var m=0;
                  for (var b:b2Body=world.GetBodyList(); b; b=b.GetNext()) {
                      if (m==3) {m=0;}
                      var distX:Number = b.GetPosition().x * worldScale - (220 + m * 100);
                      var distY:Number = b.GetPosition().y * worldScale - 180;
  
                      if (b.GetType()==b2Body.b2_dynamicBody) {
                          myBlock[m].x = distX + (220 + m * 100);
                          myBlock[m].y = distY + 180;
                          myBlock[m].rotation = b.GetAngle() * 180 / Math.PI;
  
                      }
  
                      m++
                  }
  
              world.DrawDebugData();
          }
      }
  }
  </code></pre>