0

我一直在寻找有关如何完成此操作的一些示例-但我能找到的唯一信息并没有真正让我清楚。

我希望这里有人可以提供一些见解。

我目前有一个我前段时间制作的空气应用程序。air 应用程序在第 3 帧上停止,我必须单击鼠标才能继续。当我在设备(手机/平板电脑)上加载的 html 页面上单击 btn 时,我想要做的是前进到下一帧。Air App 本身将一直运行。

我有一个服务器设置,所以我可以从我的设备(本地网络)访问 html 按钮。

我还实现了这个http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/net/Socket.html#includeExamplesSummary 以查看它如何与我的服务器交互。当我运行 air 应用程序时,我可以看到它正在调用服务器,并且 air 应用程序确实在调试器输出中从服务器打印了一些结果。但实际上,这不是我想要做的。它只是表明发生了一些连接。但流程都是错误的。

所以我的问题是。谁能给我一些有关如何从同一网络中的另一台设备触发 Air App 中的帧的详细信息?另一台设备上不需要任何闪光灯。只需一个简单的 html 按钮即可。

谢谢

4

1 回答 1

0

我会说你在这里有两条可能的路线。

  1. 在您的服务器上创建一个脚本以启动与您的空中应用程序的连接。例如使用 php 和socket,链接将类似于http://myserver/nextslide.php然后可以在您选择的 TCP 端口上连接到您的空中应用程序。这里有很多选项,具体取决于您的服务器和可用的脚本语言。

  2. 将您的 air 应用程序设置为 Web 服务器,以允许您的浏览器直接发送 HTTP 请求。例如,这里有一个非常简单的空中 HTTP 服务器 它只不过是一个在每个请求结束时关闭连接的套接字服务器)。您仍然可以像当前一样从主 Web 服务器提供您的 html,但是当在 HTTP 标头中找到相关 URI 时,您只需从空中应用程序中的 HTTP 服务器移动到下一张幻灯片。如果您只需要它在您的本地网络中工作,这就是我想要的。


上面选项 2 的示例 as3 代码,使用带有 FlashDevelop 的空中投影仪进行测试:

package 
{
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.ProgressEvent;
    import flash.events.ServerSocketConnectEvent;
    import flash.net.ServerSocket;
    import flash.net.Socket;
    import flash.utils.ByteArray;

    public class Main extends Sprite 
    {
        private var serverSocket:ServerSocket;
        private var port:int = 8080;

        public function Main():void 
        {
            listen();
        }

        private function listen():void
        {
            try
            {
                serverSocket = new ServerSocket();
                serverSocket.addEventListener(Event.CONNECT, socketConnectHandler);
                serverSocket.bind(port);
                serverSocket.listen();
                trace("Listening on port " + port + "...\n");
            }
            catch (error:Error)
            {
                trace("Failed to open server socket");
            }
        }

        private function socketConnectHandler(event:ServerSocketConnectEvent):void
        {
            var socket:Socket = event.socket;
            socket.addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler);
        }

        private function socketDataHandler(event:ProgressEvent):void
        {
            try
            {
                var socket:Socket = event.target as Socket;
                var bytes:ByteArray = new ByteArray();
                socket.readBytes(bytes);
                var request:String = "" + bytes;
                trace(request);
                var url:String = request.substring(4, request.indexOf("HTTP/") - 1);

                socket.writeUTFBytes("HTTP/1.1 200 OK\n");
                socket.writeUTFBytes("Content-Type: text/plain\n\n");

                if (url == "/next")
                {
                    socket.writeUTFBytes("next frame triggered");

                    var someMovie:MovieClip = new MovieClip(); //define this as a reference to the movie clip you want to control
                    someMovie.nextFrame();
                }
                else
                {
                    socket.writeUTFBytes("The url is " + url);
                }

                socket.flush();
                socket.close();
            }
            catch (error:Error)
            {
                trace(error);
            }
        }
    }
}
于 2013-04-15T22:40:14.773 回答