2010-10-12 4 views
0

Я преобразования простой вспышки «ударную» приложения для поддержки TUIO мультитач с помощью TUIO ссылочный as3 реализацию из http://www.tuio.org/?flashAS3: Trigger искусственный MouseEvent

В качестве быстрого и грязного решения, я пытаюсь вызвать искусственную MouseEvent, но ничего не кажется, происходит :(где моя ошибка это даже возможно благодаря уже

вот код:?!

package { 

    import org.tuio.tuio.*; 
    import org.tuio.osc.*; 
    import flash.display.*; 
    import flash.ui.*; 
    import flash.events.*; 
    import flash.media.*; 

    public class drumsets2 extends MovieClip implements ITuioListener { 

     private var tuio:TuioClient; 

     var soundS01:Sound = new S01(); 
     // more sounds... 

     public function drumsets2(){ 
      this.tuio = new TuioClient(new LCConnector()); 
      this.tuio.addListener(this); 

      drum1.hitS01.addEventListener(MouseEvent.MOUSE_DOWN, playS01); 
      // more event listeners for sounds... 
     } 


     // this is where the 'magic' is supposed to happen 

     public function addTuioCursor(tuioCursor:TuioCursor):void { 
      stage.dispatchEvent(
       new MouseEvent(MouseEvent.MOUSE_DOWN, true, false, tuioCursor.x*stage.stageWidth, tuioCursor.y*stage.stageHeight) 
      ); 
     } 


     function playS01(e:MouseEvent):void 
     { 
      var scS01:SoundChannel = soundS01.play(); 
     } 

     // more play functions... 
    } 
} 

ответ

2

Ваш слушатель событий не находится на сцене, он находится на drum1.hitS01, который я буду считать объектом DisplayObject, так как он не определен нигде в вашем прикрепленном коде. Все вы должны сделать, это послать событие на этом объекте, а не на сцене:

drum1.hitS01.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN, true, false, tuioCursor.x * stage.stageWidth, tuioCursor.y * stage.stageHeight)); 
+0

+1. Хотя код для localX и localY не имеет никакого смысла. Я знаю, что вы только что вложили эту часть из образца OP, но я, хотя это было замечательно. Возможно, использование 'drum1.hitS01.mouseX' и' drum1.hitS01.mouseY' имеет больше смысла; или просто оставить значение по умолчанию, поскольку на самом деле не было щелчка, поэтому координаты x и y здесь не имеют никакого реального значения. –

+0

спасибо! но то, что я пытаюсь сделать, - это просто пересылка сенсорных событий на весь этап, поэтому мне не нужно будет проверять, было ли событие касания внутри hihat, основано или так ... есть ли способ выполнить это поведение? –

+0

Затем вам нужно прослушиватель событий на сцене, если вы хотите переслать ему событие. Кроме того, хороший звонок Хуан, я полагал, что это имело какое-то значение для него, поэтому я просто оставил его в покое. – Aaron

0

Если я понять ваш вопрос правильно, кажется, что вы просто пытаясь вызвать функцию playS01 из кода? Если это так, вы можете в любом месте своего класса позвонить по телефону playS01(null). Вам нужно передать это значение null, если оно не происходит от события мыши, поэтому оно не приводит к ошибке в получении ожидаемого аргумента.

+0

дела в том, что есть _lots_ из прекрасно функционирующих событий мышей и я не хочу возиться со всем этим кодом. я подумал, что, возможно, можно просто искусственно вызвать существующие события. Мне нужно сделать это и в других проектах, так что это будет крутое решение, которое я мог бы использовать для всех ... –

Смежные вопросы