Flash IFrame游戏的Kongregate API连接

为了当你的Flash游戏被一个iframe服务时能使用Kongregate客户端API,您将需要传递一些Kongregate特定的Flash变量到你的SWF。

准备你的HTML

为了通过适当的Flash变量,您的网页源将需稍作修改。第一步是包括一些Kongregate JavaScript:

<script src='http://www.kongregate.com/javascripts/kongregate_api.js'></script>

一旦这个脚本被加载,你可以使用下面的命令访问一串Kongregate Flash变量:

kongregateAPI.flashVarsString()

这个函数将返回一个URL编码的字符串,将以“&”结束,所以你可以简单地添加任何你需要的自定义Flash变量到你的终端上。然后,您必须传递这些Flash变量到您的SWF。欲了解更多有关如何操作的信息,请参阅此链接

如果您正在使用一些类似SWF对象的东西嵌入您的SWF,访问一个对象而不是一个包含Flash变量的字符串可能更为方便。这可以让你列举所需要的Kongregate变量并合并它们到你自己的变量。您可以使用flashVarsObject函数访问此对象,如下所示:


kongregateAPI.flashVarsObject()

基本HTML示例

这里有一个非常基础的例子关于如何利用上述信息的传递Kongregate Flash变量到您的SWF。请注意,这个例子是非常粗略,更常见的是用一些诸如SWFObject或Adobe的工具来嵌入SWF。

<html>
<body>

<script type="text/javascript" src="http://www.kongregate.com/javascripts/kongregate_api.js"></script>
<script language="javascript" type="text/javascript">
  var flashvars = kongregateAPI.flashVarsString();
  var html='<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"';
  html += 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"';
  html += 'WIDTH="550" HEIGHT="400" id="game"><PARAM NAME="movie" ID="movie" VALUE="http://www.mysite.com/MyGame.swf">';
  html += '<PARAM NAME="flashvars" VALUE="' + flashvars + '">'; // Add in flashvars
  html += '<EMBED src="http://www.mysite.com/MyGame.swf" WIDTH="550" HEIGHT="400"';
  html += 'NAME="game" ID="game" TYPE="application/x-shockwave-flash"';
  html += 'PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"';
  html += 'FLASHVARS="' + flashvars + '"></EMBED></OBJECT>'; // Add in flashvars
  document.write(html);

</script>
</body>
</html>

准备你的SWF

您需要打电话到Security.allowDomain(api_path) ,在那里 api_path 是一个变量包含了到 Kongregate API SWF的网址。在对API的网址存储在Flash变量中名为kongregate_api_path

通常最方便的做法是先加载SWF到你的游戏,然后再传递一个参考到API对象进到任何其它需要它的SWF上。请注意,您需要再任何SWF做这个allowDomain调用,并且参考 Kongregate API。

这一调用需在你加载API SWF之前进行。这将允许你的母SWF和我们的API沟通。欲了解更多有关Security.allowDomain信息,请参阅此链接

下面是一个关于加载AS3 API,设置适当的权限的简单例子:

import flash.display.LoaderInfo;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.events.Event;
import flash.system.Security;

var kongregate:*;

//加载Kongregate API的函数
function initializeKongregateAPI():void{
	// 从FlashVars推动API路径
	var paramObj:Object = LoaderInfo(root.loaderInfo).parameters;
	var apiPath:String = paramObj.kongregate_api_path || "http://www.kongregate.com/flash/API_AS3_Local.swf";
	Security.allowDomain(apiPath);
	
	// 加载API
	var request:URLRequest = new URLRequest(apiPath);
	var loader:Loader = new Loader();
	loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onKongregateAPILoaded);
	loader.load(request);
	this.addChild(loader);
}

// 当Kongregate API被加载时调用
function onKongregateAPILoaded( event:Event ):void{
       kongregate = event.target.content;
       kongregate.services.connect();
}

//开始加载API的过程
initializeKongregateAPI();

如果您传递kongregate对象到另一个SWF,您也将需要明确地从SWF调用allowDomain。你可以用API网址字符串的参考做这个,或者你可以从API对象本身得到它:


Security.allowDomain(kongregate.loaderInfo.url);

如果您仍然无法让它们工作,或发现您无法得到安全,Security.allowDomain ("*")也可能值得一试,暂时去帮助处理有问题发生的地方。

你一切准备就绪!

您现在应该能够利用KongregateAPI,就好像你的游戏在Kongregate上运作。

Edit | Translate | Destroy