高得分/社交网络
按字母顺序整理的高得分/社交网络
AGON Online整合到Cocos2d-iphone里
iPhone
欢迎进入这个向导,在这里我们将会创建一个简单的cocos2d iphone游戏用AGON Online来保存和显示得分。
我假设你已经下载了cocos2d-iphone sdk并且已经把cocos2d的模板安装到了Xcode里
开始设置:
注册一个开发者AGON online账号:http://developer.agon-online.com/join
接着在AGON服务器上安装一个游戏:http://developer.agon-online.com/wiki/doku.php?id=docs:application_registration
打开Xcode创建一个cocos2d模板的app。编译并运行后会显示一个"Hello World“的字样
下载AGON SDK:http://devdb.agon-online.com/developer/dashboard/downloads
接着把AGON整合到你的工程里:http://developer.agon-online.com/wiki/doku.php?id=docs:quick_start
注意:
一个cocos2d工程建立了2个目标。一个是为cocos2d,另一个是为你的软件。设置被定义的工程等级将会从目标中继承。正如我们想应用设置AGON在你的程序目标结点上而不是顶部工程的结点上。
如果当你building工程的时候你遇到了链接的麻烦,你最好按照综合指导里的步骤来检查一下,确保你已经做了如下几点:
添加了所有需要的框架
添加了所有的参数在build选项里
你的os版本选择,基于sdk和deployment目标已经被合理的设置
你的搜索路径已经改为你下载的AGON SDK libs文件的地址
为你的程序下载AgonPackage.bundle从开发者页面,把它作为你工程的一部分
初始化AGON
在最初你会有一个Hello World的app,然后build AGON库。现在我们添加一些AGON功能。
通过调用AgonCreate()来初始化AGON在某些地方通过你启动程序。请记住对于一个正确的游戏,我建议
在你的AppDelegate.m文件里的applicationDidFinishLaunching中把调用替换掉。当然这是一个好的想法来配置AGON来在窗口显示出debug消息通过调用AgonShowLogs(YES)。当你在运行时遇到突发情况,这个日志可以帮助你。
菜单中的AGON选项
接下来,我们将要创建一个新的菜单包含一些AGON的控件按钮。我们将会把来自Cocos2d CCMenu class添加到自己的菜单类里。这是一种创建菜单项的最好方式。
在HelloWorldScene.h里我们插入我们新的MenuLayer interface声明在HelloWorld interface声明的前面,我们将会这么做:
HelloWorldScene.h
#import "cocos2d.h"
@interface MenuLayer : CCLayer
{
}
-(void)playGame: (id)sender;
-(void)showLeaderboards: (id)sender;
@end
// HelloWorld Layer
@interface HelloWorld : CCLayer
{
}
// returns a Scene that contains the HelloWorld as the only child
+(id) scene;
@end
我们需要添加一些新类的声明。在HelloWorldScene.m里我们声明我们的MenuLayer类,这样的话在init函数里我们创建菜单项来出发函数playGame和showLeaderborads。
对于显示我们实际的菜单来说,我们实例化它并把它添加到HelloWorldScene中。这些发生在HelloWorldScene中的初始化函数里
对类的声明如下所示:
HelloWorldScene.m
#import "HelloWorldScene.h"
#import "AGON.h"
@implementation MenuLayer
- (id) init {
self = [super init];
if (self != nil) {
[CCMenuItemFont setFontSize:20];
[CCMenuItemFont setFontName:@"Helvetica"];
CCMenuItem *randomGame = [CCMenuItemFont itemFromString:@"Play Random Game"
target:self
selector:@selector(playGame:)];
CCMenuItem *leaderboardsItem = [CCMenuItemFont itemFromString:@"Show Leaderboards"
target:self
selector:@selector(showLeaderboards:)];
CCMenu *menu = [CCMenu menuWithItems:randomGame,leaderboardsItem,nil];
[menu alignItemsVertically];
[self addChild:menu];
}
return self;
}
-(void)showLeaderboards: (id)sender {
}
-(void)playGame: (id)sender {
}
@end
// HelloWorld implementation
@implementation HelloWorld
+(id) scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScene node];
// 'layer' is an autorelease object.
HelloWorld *layer = [HelloWorld node];
// add layer as a child to scene
[scene addChild: layer];
// return the scene
return scene;
}
// on "init" you need to initialize your instance
-(id) init
{
// always call "super" init
// Apple recommends to re-assign "self" with the "super" return value
if( (self=[super init] )) {
[self addChild:[MenuLayer node] z:1];
}
return self;
}
// on "dealloc" you need to release all your retained objects
- (void) dealloc
{
// in case you have something to dealloc, do it in this method
// in this particular example nothing needs to be released.
// cocos2d will automatically release all the children (Label)
// don't forget to call "super dealloc"
[super dealloc];
}
@end
玩游戏并添加得分,接下来我们扩大playGame的功能。作为一个简单的指导,我们保持这个极佳的例子。玩游戏往往伴随着一个随机数字来作为你的分数,当你按下按钮。你将会添加你真正游戏的流程,像玩一个等级,提交一个分数当你完成之后。
GameSessions里的概念AGON操作是一种容易脱机存储的友好方式。这意味着当你开始游戏等级的时候,你应该调用AgonBeginGameSession(),并在作为这个等级里的组后一步,所以你需要调用AgonEndGameSession()。如果你不这样做,那就无法提交分数。
当提交了分数,你不得不 描述一个排行榜,关于得分和难度。你可以从这里得到更多的排行榜信息(http://developer.agon-online.com/wiki/doku.php?id=docs:application_registration)。
所以我们的playGame函数要像下面这个样子:
-(void)playGame: (id)sender {
// Emulate a game session resulting in a score that is stored by AGON.
// It is important to encapsulate a game session with AgonStartGameSession() and AgonEndGameSession()
AgonStartGameSession();
int score = rand();
AgonSubmitScore(score,[NSString stringWithFormat:@"%d",score],MY_LEADERBOARD_ID);
AgonEndGameSession();
}
显示分数
最后,我们能打开AGON interface看见我们玩游戏时提交的分数
-(void)showLeaderboards: (id)sender {
// Open AGON and show the leaderboard for which the game has submitted scores
AgonShowLeaderboard(MY_LEADERBOARD_ID, YES);
}
关于AGON和导演的特别注意
AGON是通过iphone SDK中的UIKit来编译的。Cocos2d有不同的导演来运行严格影响UIKit表现的主循环。这里有一个关于CCDirectorTypeMainLoop特别的编译标识CC_DIRECTOR_DISPATH_FAST_EVENTS。如果你在插入AGON时遇到这个问题,这有一个好的方式在打开AGON来阻止Cocos2d调用之前:
[[CCDirector sharedDirector] stopAnimation]
当AGON隐藏并再一次继续调用Cocos2d
[[CCDirector sharedDirector] startAnimation]
这将会阻止Cocos2d完成当AGON显示并且调用光了UIKit信息之前。
最后的几点:
我们的指导整合了AGON和Cocos2d app通过一些简单的工具:提交分数。从这里,你可以找到AGON SDK文档并学到更多的知识:
提交奖赏
改变配置
通过iCloud来链接游戏的数据
cocos2d与OpenFeint的整合
这里讲了如何将cocos2d与openfeint进行整合
OpenFeint and Cocos2d iPhone Tutorial
网络广告:
讲cocos2d与Admob进行整合
Integrating AdMob with Cocos2d-iPhone Applications