3

オンラインのMysqlデータベース、Scaleform 4(AS3)、およびPHPを使用して、HTTPリクエストを介してUDKGameのハイスコアをWebサーバーに投稿して取得したいと思います。残念ながら、このドキュメントを考慮すると、それは不可能かもしれないと思います:http: //gameware.autodesk.com/documents/gfx_4.0_flash_support.pdf

GFx Movie PlayerからURLRequestを送信しようとしましたが、機能しないようです。これが、フレーム1のGFxムービープレーヤーに使用しているAS3コードです。

getScore();

function getScore():void {
//var url:String = "http://myserver.com/getScore.php";
    var request:URLRequest = new URLRequest(url);
    var requestVars:URLVariables = new URLVariables();
    requestVars.foo = "bar";
    request.data = requestVars;
    //request.method = URLRequestMethod.POST;
    //Security.allowDomain("myserver.com"); 
    //var context:LoaderContext = new LoaderContext();
    //context.securityDomain = SecurityDomain.currentDomain

    var urlLoader:URLLoader = new URLLoader();
    urlLoader = new URLLoader();
    urlLoader.dataFormat = URLLoaderDataFormat.TEXT;
    urlLoader.addEventListener(Event.COMPLETE, loaderCompleteHandler, false, 0, true);
    urlLoader.load(request);

    }

function loaderCompleteHandler(e:Event):void {
    trace(e.target.data);
    Object(this).response.text= "response:"+e.target.data;

}

.dllを記述したり、Webサーバーへの手動TCP接続を使用したりせずに、目標を達成する方法はありますか?

4

2 に答える 2

2

残念ながら、UDK (4.0.16) に付属する Scaleform には、ネットワーク サポートが組み込まれていません。dll bind などを介して UDK に問題のその部分を実行させる必要があります。Scaleform 4.2 ではネットワーク サポートが追加されましたが、そのバージョンの Scaleform はまだ UDK に統合されていません。ただし、統合の過程にあるため、すぐに表示されることを願っています.

于 2012-12-03T21:31:50.043 に答える
0

実際、SF4.0 はそれをサポートしていません。SF4.2はそうかもしれませんが、Epic の Perforce デポを通じて UE3 ライセンシーのみが利用できます。

unrealscript で実行できます。ただし、dll または TCP 接続を使用するのは少しやり過ぎです。HttpRequestInterfaceを使用します。以下は、UDK で提供されるソース サンプルからの直接の例です。これは非常に単純で、わずか数行で Web サービスを呼び出すのに必要な厳密なコードにまで切り詰めることができます。

/**
 * Simple function to illustrate the use of the HttpRequest system.
 */
exec function TestHttp(string Verb, string Payload, string URL, optional bool bSendParallelRequest)
{
    local HttpRequestInterface R;

    // create the request instance using the factory (which handles
    // determining the proper type to create based on config).
    R = class'HttpFactory'.static.CreateRequest();
    // always set a delegate instance to handle the response.
    R.OnProcessRequestComplete = OnRequestComplete;
    `log("Created request");
    // you can make many requests from one request object.
    R.SetURL(URL);
    // Default verb is GET
    if (Len(Verb) > 0)
    {
        R.SetVerb(Verb);
    }
    else
    {
        `log("No Verb given, using the defaults.");
    }
    // Default Payload is empty
    if (Len(Payload) > 0)
    {
        R.SetContentAsString(Payload);
    }
    else
    {
        `log("No payload given.");
    }
    `log("Creating request for URL:"@URL);

    // there is currently no way to distinguish keys that are empty from keys that aren't there.
    `log("Key1 ="@R.GetURLParameter("Key1"));
    `log("Key2 ="@R.GetURLParameter("Key2"));
    `log("Key3NoValue ="@R.GetURLParameter("Key3NoValue"));
    `log("NonexistentKey ="@R.GetURLParameter("NonexistentKey"));
    // A header will not necessarily be present if you don't set one. Platform implementations
    // may add things like Content-Length when you send the request, but won't necessarily
    // be available in the Header.
    `log("NonExistentHeader ="@R.GetHeader("NonExistentHeader"));
    `log("CustomHeaderName ="@R.GetHeader("CustomHeaderName"));
    `log("ContentType ="@R.GetContentType());
    `log("ContentLength ="@R.GetContentLength());
    `log("URL ="@R.GetURL());
    `log("Verb ="@R.GetVerb());

    // multiple ProcessRequest calls can be made from the same instance if desired.
    if (!R.ProcessRequest())
    {
        `log("ProcessRequest failed. Unsuppress DevHttpRequest to see more details.");
    }
    else
    {
        `log("Request sent");
    }
    // send off a parallel request for testing.
    if (bSendParallelRequest)
    {
        if (!class'HttpFactory'.static.CreateRequest()
            .SetURL("http://www.epicgames.com")
            .SetVerb("GET")
            .SetHeader("Test", "Value")
            .SetProcessRequestCompleteDelegate(OnRequestComplete)
            .ProcessRequest())
        {
            `log("ProcessRequest for parallel request failed. Unsuppress DevHttpRequest to see more details.");
        }
        else
        {
            `log("Parallel Request sent");
        }
    }
}


/** Delegate to use for HttpResponses. */
function OnRequestComplete(HttpRequestInterface OriginalRequest, HttpResponseInterface Response, bool bDidSucceed)
{
    local array<String> Headers;
    local String Header;
    local String Payload;
    local int PayloadIndex;

    `log("Got response!!!!!!! Succeeded="@bDidSucceed);
    `log("URL="@OriginalRequest.GetURL());
    // if we didn't succeed, we can't really trust the payload, so you should always really check this.
    if (Response != None)
    {
        `log("ResponseURL="@Response.GetURL());
        `log("Response Code="@Response.GetResponseCode());
        Headers = Response.GetHeaders();
        foreach Headers(Header)
        {
            `log("Header:"@Header);
        }
        // GetContentAsString will make a copy of the payload to add the NULL terminator,
        // then copy it again to convert it to TCHAR, so this could be fairly inefficient.
        // This call also assumes the payload is UTF8 right now, as truly determining the encoding
        // is content-type dependent.
        // You also can't trust the content-length as you don't always get one. You should instead
        // always trust the length of the content payload you receive.
        Payload = Response.GetContentAsString();
        if (Len(Payload) > 1024)
        {
            PayloadIndex = 0;
            `log("Payload:");
            while (PayloadIndex < Len(Payload))
            {
                `log("    "@Mid(Payload, PayloadIndex, 1024));
                PayloadIndex = PayloadIndex + 1024;
            }
        }
        else
        {
            `log("Payload:"@Payload);
        }
    }
}
于 2015-08-04T09:00:31.873 に答える