cocos2d-iphone ~ cocos2d-html5 之旅

借着清明放假休息三天的帮忙,现在终于把所有的工作都做完了。本来是想简单写一写心得,但是一旦开始写,就发现要写的东西比想的要多得多。恰好最近Ray wenderlich的官网出了篇关于ibooks author的教程,看了觉得非常的棒,于是干脆决定用ibooks author来做一本电子书。

个人更觉得这是一本类似Guide–指南的书,内容大部分都是网上找不到的(有的我也懒得去写),后半部的游戏部署和接入为了写的更清楚,我特地弄了个极其简单的Demo,然后把整个流程又走了遍,借了很多图,让人能看得更明白。

如果看过书的各位,能对cocos2d-html产生较大的兴趣,觉得很有趣很强大,那么这本书的意义就达到了(当然如果对我也能产生一点小小的兴趣的话就更好了,呵呵)。
继续阅读

[Part.2] 利用URLSchemes功能通过邮件发送“游戏关卡”的解决方案

3.在游戏内发送邮件

在我们使用URLSchemes之前,首先先要来实现一下游戏内发送邮件的功能。
通过使用MFMailComposeViewController可以简单得实现这个功能,具体可以看以下我以前写过的Demo:

http://www.supersuraccoon-cocos2d.com/2011/03/29/send-e-mail-demo/

对本项目来说,最重要的是邮件的正文部分,我们需要将游戏关卡的JSON字符串内容嵌入到超链接中:

NSString *emailBody = [NSString stringWithFormat:@”Launch Demo!!!“, jsonString];

接下来我们就来使用URLSchemes功能实现关卡数据的发送和接受。

4.使用URLSchemes发送和接收数据

首先我们要做的是为我们的项目设置URLSchemes,具体可以看以下这个教程:

http://iphonedevelopertips.com/cocoa/launching-your-own-application-via-a-custom-url-scheme.html

本项目使用的URL是“URLSchemesDemo://”,通过本URL来启动我们的程序
.
另外,在URLSchemes中添加数据一并发送以及接收数据的时候,都需要对数据进行加密解密:

[cc lang=”objc”]
– (NSString *)encodeToPercentEscapeString: (NSString *) input
{
// Encode all the reserved characters, per RFC 3986
// ()
NSString *outputStr = (NSString *)
CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
(CFStringRef)input,
NULL,
(CFStringRef)@”!*'();:@&=+$,/?%#[]”,
kCFStringEncodingUTF8);
return outputStr;
}

– (NSString *)decodeFromPercentEscapeString: (NSString *) input
{
NSMutableString *outputStr = [NSMutableString stringWithString:input];
[outputStr replaceOccurrencesOfString:@”+”
withString:@” “
options:NSLiteralSearch
range:NSMakeRange(0, [outputStr length])];

return [outputStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
[/cc]

4.1 通过URLSchemes发送游戏关卡数据:

为了使用户在点击我们注册的URLSchemes启动我门的数据的时候,同时将数据传到我们的app中,需要在发送邮件时,在链接中嵌入JSON的游戏关卡数据:

[cc lang=”objc”]
jsonString = [[GameDataManager sharedGameDataManager] encodeToPercentEscapeString:jsonString];
NSString *emailBody = [NSString stringWithFormat:@”Launch Demo!!!“, jsonString];
[/cc]

这样,我们的数据就会随着程序启动被传到app中了。

4.2 接收URLSchemes传来的游戏关卡数据:

接收数据还是比较简单的:

[cc lang=”objc”]
– (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
if (!url) {
return NO;
}

[[GameDataManager sharedGameDataManager] processReceivedGameLevel:[url absoluteString]];

return YES;
}
[/cc]

这样,我们就成功的在app启动的时候将附在URLSchemes中的数据接收了下来,接下来只要通过“processReceivedGameLevel”来进行字符串的解密和解析,并将其保存为JSON文件的游戏关卡就可以了。

5.总结

至此,我们的演示项目就全部完成了,主要涵盖了一下的功能:

1.生成“游戏关卡”并保存为JSON文件
2.通过邮件发送生成的“游戏关卡”
3.使用URLSchemes功能来启动app,并附上自定义的游戏数据
4.接收随URLSchemes发送的数据并将其解析成JSON格式的游戏关卡
5.加载保存好的“已发送/已接收”游戏关卡

一些值得注意的地方:

1.对于一个真正的游戏来说,当然应该提供一个让用户方便使用的“游戏编辑器”而不是像项目中一样只是简单的生成一个游戏关卡

2.对于URLSchemes的长度限制问题,虽然我没有查到具体的文档记载的长度限制值,但是我简单的试验了一下,长度在10,0000的时候还是可以正常发送的,所以对于大多数情况应该还是适用的^_^

程序截图:

To Download Page…

☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

If you feel all the stuffs in this site helped you a lot and you would buy me a beer 🙂


Or get a game I made 🙂


☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

[Part.1] 利用URLSchemes功能通过邮件发送“游戏关卡”的解决方案

你是否想过为自己的游戏中加入“发送自定义游戏关卡“的功能呢?

如果你有自己的服务器的话当然可以实现,或是使用openfeint的挑战功能以及Gamecenter(这个木有试过)来实现。

但是这些方法总是有些麻烦…要么得有台服务器,要么得使用penfeint/gamecenter(有的用户可能并没有用这些功能)。

其实,使用URLSchemes可以很简单的实现”游戏关卡发送“的功能^_^

本问包括了以下的内容:

1.准备需要的Scene和类
2.JSON文件的读写
3.在游戏内发送邮件
4.使用URLSchemes发送和接收数据
5.总结
继续阅读