AS3: запуск искусственного MouseEvent - PullRequest
0 голосов
/ 13 октября 2010

Я конвертирую простое приложение 'drumset' для поддержки мультитач TUIO, используя эталонную реализацию tuio as3 из http://www.tuio.org/?flash

В качестве быстрого и грязного решения я пытаюсь вызвать искусственное 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 ]

2 голосов
/ 13 октября 2010

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

drum1.hitS01.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN, true, false, tuioCursor.x * stage.stageWidth, tuioCursor.y * stage.stageHeight));
0 голосов
/ 13 октября 2010

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

...