Skip to main content
Participating Frequently
July 24, 2012
Question

TOUCH_END event fired on all touch id when just one touch was release

  • July 24, 2012
  • 1 reply
  • 461 views

Hi

I am developing a parking car game.

I have a  strange problem.

If i start touch on steeering and on gaz and then i release on of them , the TOUCH_END event is fired on both, and i still keep me finger stick to touch screen.

Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT;

                              _steering.addEventListener(TouchEvent.TOUCH_BEGIN,touchStart);

 

                              _gaz.addEventListener(TouchEvent.TOUCH_BEGIN,touchStart);

                              this.addEventListener(TouchEvent.TOUCH_END,touchEnd);

                              this.addEventListener(TouchEvent.TOUCH_MOVE,touchMove);

 

                              addChild(_touch_field);

                              addChild(_gaz);

                              addChild(_steering);

te situation:

START:  gaz 3 0

START:  steering 2 1

( here i release only gaz)

END:  steering 3 1

END:  gaz 3 0

both touch end event are fired

the object are far away from each other

This topic has been closed for replies.

1 reply

mechlaAuthor
Participating Frequently
July 24, 2012

HERE IS ALL STEERING CLASS CODE:

package Games.Parking

{

          import Games.ShowObject;

 

          import com.greensock.TweenLite;

 

          import flash.display.DisplayObjectContainer;

          import flash.display.MovieClip;

          import flash.display.Sprite;

          import flash.events.TouchEvent;

          import flash.geom.Point;

          import flash.ui.Multitouch;

          import flash.ui.MultitouchInputMode;

 

 

          public class Steering extends ShowObject

          {

                    private var _touch_field:Sprite =  new Sprite()

                    private var _steering:MovieClip =  new steering()

                    private var _gaz:gaz = new gaz();

 

                    private var _start_touch_point:Point;

                    private var _end_touch_point:Point;

                    private var _steering_move:Boolean = false;

                    private var _steering_offset:Number =0;

 

                    private var _steering_id:int = -1;

                    private var _gaz_up_id:int = -1;

                    private var _gaz_down_id:int = -1;

 

                    private var _angle:Number = 0;

                    private var _angle_dir:String;

 

                    private var _can_steering:Boolean = true;

                    private var _check_dir:Boolean = false;

                    private var _check_first_touch:Boolean = true;

 

 

 

                    public function Steering(pClip:DisplayObjectContainer, canShow:Boolean=false)

                    {

                              super(pClip, canShow);

                              _touch_field.graphics.beginFill(0x00,0);

                              _touch_field.graphics.drawRect(0,0,Data.instance().stage_width,Data.instance().stage_height);

                              _touch_field.graphics.endFill();

                              _touch_field.name = "bg";

                              _gaz.y = 50;

                              _gaz.x = 50;

 

                              _steering.x = 200;

                              _steering.y = Data.instance().stage_height-200;

                              _steering.name = "steering";

 

 

                              Multitouch.inputMode=MultitouchInputMode.TOUCH_POINT;

                              _steering.addEventListener(TouchEvent.TOUCH_BEGIN,touchStart);

 

                              _gaz.addEventListener(TouchEvent.TOUCH_BEGIN,touchStart);

 

                              this.addEventListener(TouchEvent.TOUCH_END,touchEnd);

                              this.addEventListener(TouchEvent.TOUCH_MOVE,touchMove);

 

                              addChild(_touch_field);

                              addChild(_gaz);

                              addChild(_steering);

                    }

                    private function touchMove(e:TouchEvent):void{

  //                              trace("MOVE: ",e.pressure,e.target.name,e.eventPhase,e.touchPointID,e.stageX,e.stageY);

                              if(_steering_move && _steering_id == e.touchPointID){

 

                                        if(e.stageY<_steering.y+25 && e.stageY>_steering.y-25 && e.stageX>_steering.x){

                                                  _check_dir = true;

                                        }else{

                                                  if(_check_dir){

                                                            _check_dir = false;

//                                                            trace(e.stageY,_steering_mc.y,_check_dir);

                                                            if(e.stageY<_steering.y)

                                                                      _angle_dir = "left";

                                                            else

                                                                      _angle_dir = "right";

                                                  }

                                        }

                                        var dict_x:Number = e.stageY - _steering.y;

                                        var dict_y:Number = e.stageX  -_steering.x;

                                        _angle = Math.atan(dict_x/dict_y);

                                        _angle = _angle/(Math.PI)*180;

                                        if(e.stageX<_steering.x){

                                                  if(e.stageY<_steering.y)

                                                            _angle = (-1)*(90+(90-_angle));

                                                  else

                                                            _angle = (-1)*(180+(-1)*_angle);

                                        }

  //                                        trace(_angle<-25,e.stageY>_steering_mc.y , e.stageX> _steering_mc.x);

                                        if(e.stageY>_steering.y && e.stageX> _steering.x){

                                                  _angle = (-1)*(270 + 90-_angle);

                                        }

 

                                        if((_angle_dir == "left" && _angle<-179 )||(_angle_dir == "right" && _angle> -179)){

                                                  _can_steering = false;

                                        }

                                        else{

                                                  _can_steering = true;

                                        }

//                                        trace(_angle,_angle_dir,_can_steering);

                                        if(_can_steering){

                                                  _steering.rotation = _angle;

                                                  Game.instance().parking.car.turn(_angle,_angle_dir);

                                        }

                              }

                    }

                    private function touchStart(e:TouchEvent):void{

                              trace("START: ",e.target.name,e.eventPhase,e.touchPointID)

                              switch(e.target.name )

                              {

  case "steering":{

                                                  _steering_move = true;

                                                  _steering_id = e.touchPointID;

                                                  _start_touch_point = new Point(e.stageX,e.stageY);

                                                  if(e.stageY<_steering.y)

                                                            _angle_dir = "left";

                                                  else

                                                            _angle_dir = "right";

                                                  break;

                                        }

                                        case "up":{

                                                  _gaz_up_id = e.touchPointID;

                                                  Game.instance().parking.car.up = true;

                                                  break;

                                        }

 

                                        case "down":{

                                                  _gaz_down_id = e.touchPointID;

                                                  Game.instance().parking.car.down = true;

                                                  break;

                                        }

                              }

                    }

                    private function touchEnd(e:TouchEvent):void{

                              trace("END: ",e.target.name,e.eventPhase,e.touchPointID);

                              if(e.touchPointID == _steering_id){

                                        Game.instance().parking.car.steering = 0;

                                        _steering_move = false;

                                        _steering_id = -1;

                                        TweenLite.to(_steering,.3,{rotation:0});

  return;

                              }

                              if(e.touchPointID == _gaz_up_id){

                                        _gaz_up_id = -1;

                                        Game.instance().parking.car.up = false;

  return;

                              }

                              if(e.touchPointID == _gaz_down_id){

                                        _gaz_down_id = -1;

                                        Game.instance().parking.car.down = false;

  return;

                              }

                    }

 

                    public function get steering_mc():MovieClip

                    {

                              return _steering;

                    }

          }

}

and the trace:

3 fingers are starting touch event:

START:  steering 2 0

START:  down 3 1

START:  up 3 2

i release just one finger, 2  still stick to stage:

END:  steering 3 0

END:  down 3 1

END:  up 3 2