0

我正在使用来自http://www.tuio.org/?flash的 tuio as3 参考实现转换一个简单的 flash 'drumset' 应用程序以支持 TUIO 多点触控

作为一个快速而肮脏的解决方案,我试图触发一个人为的 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...
    }
}
4

2 回答 2

2

您的事件监听器不在舞台上,它在drum1.hitS01 上,我假设它是一个DisplayObject,因为它没有在您附加的代码中的任何地方定义。您需要做的就是在该对象上调度事件,而不是在舞台上:

drum1.hitS01.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_DOWN, true, false, tuioCursor.x * stage.stageWidth, tuioCursor.y * stage.stageHeight));
于 2010-10-12T22:40:21.053 回答
0

如果我正确理解您的问题,您似乎只是想从代码中调用 playS01 函数?如果可以的话,你可以在班上的任何地方打电话playS01(null)。如果它不是来自鼠标事件,则需要将其传递给 null ,这样它就不会因为没有收到预期的参数而困扰您。

于 2010-10-12T21:37:51.673 回答