Kongregate场景共享API(仅适用于AS3)

Kongregate的场景共享API使开发人员比以往更容易加入特点如自定义场景分享到你的游戏中。新的API使你的玩家们能够:

  • 保存游戏中内容如场景,人物和游戏自定义到Kongregate的服务器上方便在任何时间从任意电脑上检索。
  • 浏览 浏览公开共享,用户生成的内容通过Kongregate托管用户界面
  • 轻松分享游戏中内容,通过直接联系,电子邮件,或张贴顶部社区媒体网站。 (没有更多冗长乏味的文本字符串的复制和粘贴!)

我们鼓励你们都在Hexiom: Connect并在这里获取完整的文档

安装

共享内容API可以通过Kongregate API的sharedContent资源得到。目前,共享内容API只在AS3可用。当使用该服务时,你需要在调用连接到Kongregate API前注册你的事件监听器,如下所示:

// 在连接前注册共享内容加载监听器
kongregate.sharedContent.addLoadListener('Level', onLoadLevel);
  
// 连接
kongregate.services.connect();

每个游戏可储存多达10个不同类型的共享内容,所以你用这个API的可以做的事几乎是无止境的。

API函数

添加加载事件监听器

您可以使用addLoadListener函数来注册一个事件监听器,当指定类型的内容是由用户加载时将被开启。

addLoadListener(contentType:String, callback:Function):void
  • 内容类型:字符串 – 要监听的内容类型
  • 回调:函数 - 当内容加载提出请求时调用函数

回调函数必须接受一个单一的对象,将具有以下属性:

  • •id: 数值- 共享内容的账号
  • •名称:字符串- 共享内容的名称
  • •固定链接:字符串- 到共享内容的一个链接
  • •内容:字符串- 内容本身
  • •标签:字符串- 内容的标签

例如: 加载共享内容"Contraption"作为内容类型:

kongregate.sharedContent.addLoadListener("Contraption", onContraptionLoad);

function onContraptionLoad(params:Object) {
  var id:Number        = params.id;
  var name:String      = params.name;
  var permalink:String = params.permalink;
  var content:String   = params.content;
  var label:String     = params.label;
       
  trace("Contraption " + id + " [" + label + "] loaded: " + content);
}

浏览共享内容

通过浏览使用功能,可能会导致一连串的共享内容列表出现在用户的浏览器。这将允许他们为你的游戏查看,定等级,或加载共享内容。

browse(contentType:String, sortOrder:String=null, label:String=null):void
  • 内容类型:字符串 – 要浏览的内容类型
  • 排序要求:字符串- 不间断地选择指定如何排序内容:
    • Ø 按最新排序 - 最新的内容优先(如果没有特定方法是指默认)
    • Ø 按评分排序 – 评分最高的内容的优先
    • Ø 按加载次数排序 - 看得最多的内容优先
    • Ø 按朋友排序 - 只显示朋友制作的内容(最新的优先)
    • Ø 按自己排序 - 只显示自己的内容(最新的优先)
  • 标签:字符串 - 可选,只能浏览指定标签保存的内容

示例: 显示一个Contraptions共享内容的浏览器,只显示那些你朋友制作的带有“3级解决方案”标签的内容

kongregate.sharedContent.browse("Contraption", kongregate.sharedContent.BY_FRIENDS, "Level 3 Solution");

保存内容

您可以使用保存函数提交共享内容到Kongregate后端。

save(type:String,content:String,callback:Function,thumb:DisplayObject=null,label:String=null):void
  • • 类型:字符串 — 用户想要保存的内容类型,最多12个字符
  • • 内容:字符串 — 内容的值将被保存。我们强烈建议保寸这些值在100K以下,因为游戏将挂起直到内容被发送,如果内容太大这会导致糟糕的用户体验。
  • • 回调:函数 — 当保存已经完成时调用函数
  • • thumb:显示项目 - 可选,但强烈推荐! 发送一个DisplayObject给我们,我们将快照拍下并作一个内容的缩略图。如果没有提供,我们会用整个场景的图片并将其作为缩略图。
  • • 标签:字符串 - 可选,标签为分级共享的内容。

回调 参数应该是一个函数,它接受一个单独对象作为一个参数,并具有以下属性:

  • • 成功:Boolean - 如果成功为True。如果为false,其他属性将不存在
  • • id:数 - 共享内容的数据库id
  • • 名称:字符串 - 共享的内容名称
  • • 固定链接:字符串 - 连接到共享内容
  • •内容:字符串 - 内容本身
  • •标签:字符串 - 内容的标签

例如: 保存一些"x1y3z10"的共享内容,作为一个"Contraption", 在onContraptionSaved 使用myContraptionEditor制成略缩图并标签“Level 3 Solution”

kongregate.sharedContent.save('Contraption', 'x1y3z10', onSaved, myContraptionEditor, 'Level 3 Solution');

function onSaved(params:Object) {
  if (params.success) {
    //共享内容被成功保存
    trace("Content saved, id:" + params.id + ", name:" + params.name);
  } else {
    // 共享内容没被保存
    // 最有可能的原因的是用户忽略了保存对话框
  }
}

在网站上而非Kongregate上保存共享内容

除了Kongregate,你还可以提交您游戏版本中创建的共享内容到网站上。API只是由一组网址参数组成,与你传送的GET请求一起发送到Kongregate上的你游戏的网址。

相关的参数查询有类型,内容和可选标签。请注意,由于是通过一个网址浏览器限制得以通过,因此这方法就内容的尺寸尤为限制, - 编码后它们需要限制在2000个字符以下以确保它能工作。

此外,一个尾随的&z必须附加到网址,以表示内容没有被截断。

例子

这个片段是一个简单的函数,它接受有关参数,并转发到Kongregate:

var saveRemote:Function=function(kongregateGameUrl:String,type:String,content:String,label:String=null):void{
  var toQueryString:Function = function(params:Object):String {
    var q:Array = [];
    for (var p:String in params) q.push(encodeURIComponent(p) + '=' + encodeURIComponent(params[p]));
    return q.join('&');
  }
  
  var loc:String = kongregateGameUrl + "?" + toQueryString({
    'type': contentType,
    'content': content,
    'label': label
  }) + '&z';

  // 这各&z印记表明,没有内容被一个差劲的浏览器从网址截断了
  // 并且当一个用户访问游戏时需要保存你的场景
  
  // 确保你的网址通过浏览器发送时不会太长
  if (loc.length < 2000)
    navigateToURL(new URLRequest(loc), '_blank');
  
  // 还有。。。
  // 你将需要提供一些错误处理方式以防内容太大
}

Edit | Translate | Destroy