0

私は ActionScript 3 でオンラインのマルチプレイヤー テキストベースのゲームを書いており、単一のオブジェクトを作成し、すべてのプレイヤーがその場でそれを変更できるようにする方法を見つけようとしています (つまり、変更すると、他のクライアントはその新しい価値が見えてきます。)

Google は、SharedObject を使用するように指示しています。しかし、方法がわかりません。さらに、それが私が探しているものを実行するかどうかはわかりません。

つまり、単一のオブジェクト ( member を持つ ChatRoom ) が存在するチャット ルームと考えてくださいText:String

どうすればそのようなことを実装できますか? :

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

ありがとう !

4

1 に答える 1

0

私がこれを正しく理解している場合、おそらくサーバー側のコードを使用して、クライアントとの間でメッセージをやり取りする必要があります。

私の知る限り、SharedObject は同じページ上の 2 つの個別のフラッシュ インスタンス間で通信するためのものです。EDIT:リモート通信を利用できるAdobe Flash Media Severを実行している場合を除きます。

これは、php にデータを送信して何かを返す簡単な例です。サーバー側のロジックをカスタマイズして、必要に応じて機能させることができます。

これが超高速である必要がある場合は、PHP の代わりに Redis を使用して Node サーバーをセットアップすることを検討してください。

なので

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」)

<?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.

?>
于 2013-05-26T01:10:06.583 に答える