【问题标题】:AddEventListener from Package in AIR Error #1067?AddEventListener from Package in AIR 错误 #1067?
【发布时间】:2015-01-14 02:20:41
【问题描述】:

我正在发布一个我在 AIR 2.6 而不是 Flash Player 中制作的 Flash 游戏,因为这是我可以让它与 TCP 一起工作的唯一方法。但是由于某种原因,这样做似乎不允许我导入包...

如果我通过 Flash Player 发布它,则此代码可以正常工作:

import TCP;
addEventListener(Event.ENTER_FRAME, TCP);

当我做同样的事情但使用 AIR 2.6 发布时,我收到此错误:

1067:将 Class 类型的值隐式强制转换为不相关的 Function 类型。

这是整个包裹:

package
{ 
    import flash.display.Sprite; 
    import flash.events.EventDispatcher;
    import flash.events.Event; 
    import flash.events.*;
    import flash.events.IOErrorEvent; 
    import flash.events.ProgressEvent; 
    import flash.events.ServerSocketConnectEvent; 
    import flash.net.ServerSocket; 
    import flash.net.Socket;

    public class TCP extends Sprite 
    { 
        private var serverSocket:ServerSocket; 
        private var clientSockets:Array = new Array(); 

        public function TCP()
        { 
            try 
            { 
                // Create the server socket 
                serverSocket = new ServerSocket(); 

                // Add the event listener 
                serverSocket.addEventListener( Event.CONNECT, connectHandler ); 
                serverSocket.addEventListener( Event.CLOSE, onClose ); 

                // Bind to local port 8087 
                serverSocket.bind( 8087, "127.0.0.1" ); 

                // Listen for connections 
                serverSocket.listen(); 
                trace( "Listening on " + serverSocket.localPort ); 

            } 
            catch(e:SecurityError) 
            { 
                trace(e); 
            } 
        } 

        public function connectHandler(event:ServerSocketConnectEvent):void 
        { 
            //Thesocket is provided by the event object 
            var socket:Socket = event.socket as Socket; 
            clientSockets.push( socket ); 

            socket.addEventListener( ProgressEvent.SOCKET_DATA, socketDataHandler); 
            socket.addEventListener( Event.CLOSE, onClientClose ); 
            socket.addEventListener( IOErrorEvent.IO_ERROR, onIOError ); 

            //Send a connect message 
            socket.writeUTFBytes("Connected."); 
            socket.flush(); 

            trace( "Sending connect message" ); 
        } 

        public function socketDataHandler(event:ProgressEvent):void 
        { 
            var socket:Socket = event.target as Socket 

            //Read the message from the socket 
            var message:String = socket.readUTFBytes( socket.bytesAvailable ); 
            trace( "Received: " + message); 

            // Echo the received message back to the sender 
            message = "Echo -- " + message; 
            socket.writeUTFBytes( message ); 
            socket.flush(); 
            trace( "Sending: " + message ); 
        } 

        private function onClientClose( event:Event ):void 
        { 
            trace( "Connection to client closed." ); 
            //Should also remove from clientSockets array... 
        } 

        private function onIOError( errorEvent:IOErrorEvent ):void 
        { 
            trace( "IOError: " + errorEvent.text ); 
        } 

        private function onClose( event:Event ):void 
        { 
            trace( "Server socket closed by OS." ); 
        } 
}}

那么我在这里需要做什么?我相信这个包正在“导入”,但是当我使用 addEventListener 时,我收到了这个错误。同样,这只发生在我使用 AIR 发布时。我该怎么办?

【问题讨论】:

    标签: actionscript-3 tcp air


    【解决方案1】:

    应该没有理由添加一个 enterframe 侦听器。看起来 TCP 类的功能应该是......

    var tcp:TCP = new TCP();
    

    应该实例化类。然后它的构造函数将尝试建立一个套接字连接。

    【讨论】:

    • 就是这样!谢谢。
    【解决方案2】:

    错误是正确的,你应该添加事件监听器:

    addEventListener(Event.ENTER_FRAME, onEnterFrameFunction);
    

    然后在onEnterFrameFunction中,就可以使用TCP类了:

    var tcp:TCP = new TCP();
    

    【讨论】:

    • 这将在每一帧创建一个TCP 的新实例。
    • 我以为他想在第一帧初始化一些代码。在这种情况下不要忘记删除事件监听器。
    【解决方案3】:

    我很惊讶它可以在 Flash 中运行。也许你没有完全描述事情。

    在下面的代码中,您尝试添加一个带有 Class 的事件侦听器作为事件发生时要调用的函数。

    import TCP;
    addEventListener(Event.ENTER_FRAME, TCP);
    

    所以错误是正确的:

    1067:将 Class 类型的值隐式强制转换为不相关的 Function 类型。

    从您的问题中不清楚您要对事件侦听器做什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-01
      • 2022-01-02
      • 2021-04-04
      • 1970-01-01
      • 2021-04-23
      • 2017-02-14
      • 1970-01-01
      相关资源
      最近更新 更多