Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 在ActionScript客户端之间共享数据_Actionscript 3_Multiplayer_Shared Objects - Fatal编程技术网

Actionscript 3 在ActionScript客户端之间共享数据

Actionscript 3 在ActionScript客户端之间共享数据,actionscript-3,multiplayer,shared-objects,Actionscript 3,Multiplayer,Shared Objects,我正在用ActionScript 3编写一个基于文本的在线多人游戏,试图找到一种方法来创建一个对象,并允许所有玩家动态修改它(我的意思是,当它被修改时,其他客户端将看到它的新价值。) 谷歌告诉我使用SharedObject。但我不知道怎么做。此外,我不知道它是否符合我的要求 因此,可以将其视为聊天室,其中有一个单独的对象(聊天室,其中有一个成员Text:String) 我如何实施这样的事情 function UserPressedEnter(event:KeyboardEvent,usernam

我正在用ActionScript 3编写一个基于文本的在线多人游戏,试图找到一种方法来创建一个对象,并允许所有玩家动态修改它(我的意思是,当它被修改时,其他客户端将看到它的新价值。)

谷歌告诉我使用SharedObject。但我不知道怎么做。此外,我不知道它是否符合我的要求

因此,可以将其视为聊天室,其中有一个单独的对象(聊天室,其中有一个成员
Text:String

我如何实施这样的事情

function UserPressedEnter(event:KeyboardEvent,username:String,message:String)
{
 ChatRoom.Text += "\n"+username+" : "+message;
}

谢谢

如果我理解正确,您可能需要使用一些服务器端代码并从客户端来回发送消息

据我所知,SharedObject用于在同一页面上的两个独立flash实例之间进行通信编辑:除非您运行的是Adobe Flash媒体服务器,您可以在其中利用远程通信。

下面是一个将数据发送到php并使其返回内容的简单示例。您可以自定义服务器端逻辑,使其按需要工作

如果这是一个需要超级快速的东西,您可以考虑使用Redis而不是PHP来设置节点服务器

AS

function UserPressedEnter(event:KeyboardEvent, username:String, message:String):void {
  var action:String = "http://www.mywebserver.com/save_messages.php";
  var loader:URLLoader = new URLLoader();
  loader.dataFormat = URLLoaderDataFormat.VARIABLES;

  var request:URLRequest = new URLRequest(action);
  request.method = URLRequestMethod.POST;      
  request.data = URLVariables({username:username, message:message});

  loader.addEventListener(Event.COMPLETE, completeHandler);
  loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpResponseHandler);
  loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
  loader.addEventListener(ProgressEvent.PROGRESS, progressHandler);
  loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
  loader.addEventListener(Event.OPEN, openHandler);
  loader.load(request);
}

function completeHandler(event:Event):void {
  trace("");
  trace("******************************************** DATA RETRIEVED VIA OUTPUT RESPONSE *************************************************");
  trace(event.target.data);
  trace("*********************************************************************************************************************************");
  trace("");

  trace("Data returned by server: " + event.target.data);

  ChatRoom.Text += "\n" + event.target.data.username + " : " + event.target.data.message;

  var loader:URLLoader = event.target as URLLoader;
  loader.removeEventListener(Event.COMPLETE, completeHandler);
  loader.removeEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
  loader.removeEventListener(HTTPStatusEvent.HTTP_STATUS, httpResponseHandler);
  loader.removeEventListener(ProgressEvent.PROGRESS, progressHandler);
  loader.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
  loader.removeEventListener(Event.OPEN, openHandler);
}
PHP(“动作”变量上方的save_messages.PHP)



哦,好的。非常感谢你。我已经这样做了,但我认为有一个更简单的方法。谢谢在阅读了SharedObject类之后,它确实能够与客户端进行远程通信,但是您需要一个AdobeFlashMedia服务器来利用这些功能。
<?php

  //Flash will send out name/value pairs in a POST/GET (post recommended)
  if (sizeof($_POST) > 0 || sizeof($_GET) > 0) {
    //If the POST/GET header has elements set success to true and print out the elements
    echo("success=true&");

    //The following simply parrots the values back to flash. Instead of printing out the array you could set up a DB and have them inserted or set up a web proxy to send the data elsewhere. 
    foreach ($_POST as $pKey => $pValue) {
      echo($pKey."=".$pValue."&");
    }

    foreach ($_GET as $gKey => $gValue) {
      echo($gKey."=".$gValue."&");
    }
  }
  else {
    //If the POST/GET header does not contain any information set success to false.
    echo("success=false&");
  }

  //Prints "complete" to let flash know the page has finished processing.
  echo("complete=true");

  //Flash will then read the echoed text which will be something like:
  //success=true&NAME=VALUE&NAME2=VALUE2&complete=true;

  //The "success" and "complete" vars are helpful in testing, please make sure they are accounted for.

?>