[泰然翻译] cocos2d programming guide翻译(11)

高得分/社交网络

按字母顺序整理的高得分/社交网络

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


AGON Online 是否已經關閉了  連不進去了

你可能感兴趣的:([泰然翻译] cocos2d programming guide翻译(11))