2013-04-15 3 views
0

В настоящее время я пытаюсь создать несколько текстовых полей, которые перетаскиваются и отбрасываются. Я следовал учебник ранее, который используется каре в качестве примера, где вы могли бы использовать:Starling textField touch event

var target:Quad = event.target as Quad; 

, которые ориентированы на квадроцикле, что вы парили над, я пытался изменить его

var target:TextField = event.target as TextField; 

где при компиляции дал мне ошибку «Невозможно получить доступ к свойству или методу ссылки на нулевой объект». Я не совсем уверен, в чем проблема, если кто-то может это понять для меня, это было бы здорово.

Вот остальная часть кода вот отношение:

public function onAdded():void{ 
//stuff that initialises bitmap 

for(var i:int=0; i<3; i++){ 

      //create Textfield 
      var bmpFont:starling.text.TextField = new starling.text.TextField(100,100, "test", "Arial", 10); 

      bmpFont.fontSize = 50; 
      if(i==0){ 
       bmpFont.color = Color.WHITE; 

      } 
      else if (i==1){ 
       bmpFont.color = Color.RED; 
      } 

      else if (i==2){ 
       bmpFont.color = Color.BLUE; 
      } 

      bmpFont.x = Math.random() * (stage.stageWidth - bmpFont.width); 
      bmpFont.y = stage.stageHeight/2; 
      //centering pivot point 
      bmpFont.pivotX = 50; 
      bmpFont.pivotY = 50; 

      //centering code 
      //bmpFont.x = stage.stageWidth - bmpFont.width >> 1; 
      //bmpFont.y = stage.stageHeight - bmpFont.height >> 1; 

      useHandCursor = true;     
      bmpFont.addEventListener(starling.events.TouchEvent.TOUCH, onTouch); 
      parent.addChild(bmpFont); 

      } 

ontouch функция:

 //function activating on touch 
     public function onTouch(event:starling.events.TouchEvent):void{ 
      var touches:Vector.<Touch> = event.getTouches(stage, TouchPhase.MOVED); 
      //var target:Quad = event.target as Quad; 

      var target:starling.text.TextField= event.target as starling.text.TextField 

      //single finger manipulations 
      if(touches.length == 1){ 
       var delta:Point = touches[0].getMovement(parent); 
       target.x += delta.x; 
       target.y += delta.y; 
      } 
+0

вы уверены, что эта отливка не вызывает нуль целевой объект? var target: starling.text.TextField = event.target как starling.text.TextField –

+0

Я не совсем уверен, что вы имеете в виду, не могли бы вы уточнить? – David

+0

Я забыл упомянуть, что ошибка возникает, когда я пытаюсь переместить textField, а не сразу после запуска. – David

ответ

0

попробовать

//function activating on touch 
    public function onTouch(event:starling.events.TouchEvent):void{ 
     var target:starling.text.TextField= event.target as starling.text.TextField; 
     var touches:Vector.<Touch> = event.getTouches(target, TouchPhase.MOVED); 


     //single finger manipulations 
     if(touches.length == 1){ 
      var delta:Point = touches[0].getMovement(target.parent); 
      // delta and target should be not null 

      target.x += delta.x; 
      target.y += delta.y; 
     } 
+0

Он больше не появляется с ошибкой, но ни один из движений TextFields не работает – David

+0

Я сделал след, и он, кажется, не обнаруживает никаких касаний пальцев, не совсем уверен, почему он не обнаружил его с тех пор, как я использовал quad example, все, что у него было, было «var target: Quad = event.target as Quad»; который, казалось, обнаружил касание элементов штрафа – David

+0

, тогда это означает, что проблема заключается в вычислении дельта. используйте точку останова и посмотрите, каковы значения delta.x и delta.y. Также попробуйте рассчитать штрихи [0] .getMovement (this) или getMovement (stage), извините, но я не могу отлаживать ваш код. Я вижу, что вы немного испортили исходный образец из справочной страницы скрининга. –