最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
Cocos2d-x开发者指南12:进阶话题
很棒!我们现在进入最后一章的学习。好样的!到目前为止,你应该能够较为轻松地使用Cocos2d-x来开发游戏了。但请牢记,你的创造力是无限的。本章将涵盖一些进阶概念,在内容和形式上会更加专业。
文件系统访问
虽然可以使用 stdio.h 头文件中的函数来访问文件,但这种方式存在不便之处。因为需要激活特定系统的API接口来获取文件的完整地址,例如在安卓系统上安装应用后,资源会被打包成 .apk 文件。同时,开发者可能希望能够基于分辨率自动加载资源(如图片)。
为了解决这些问题,Cocos2d-x创建了 FileUtils 类。它是一个用于在 Resources 目录下访问文件的辅助类,能够从文件中读取数据,并检查文件是否存在。
读取文件内容的函数
这些函数可以读取不同类别的文件,并返回不同的数据类型,具体如下:
| 函数名 | 返回类型 | 支持的路径类型 |
| --- | --- | --- |
| getStringFromFile | std::string | 相对路径和绝对路径 |
| getDataFromFile | cocos2d::Data | 相对路径和绝对路径 |
| getFileDataFromZip | unsigned char* | 绝对路径 |
| getValueMapFromFile | cocos2d::ValueMap | 相对路径和绝对路径 |
| getValueVectorFromFile | cocos2d::ValueVector | 相对路径和绝对路径 |
管理文件及目录的函数
这些函数可用于管理文件或目录:
| 函数名 | 支持的路径类型 |
| --- | --- |
| isFileExist | 相对路径和绝对路径 |
| isDirectoryExist | 相对路径和绝对路径 |
| createDirectory | 绝对路径 |
| removeDirectory | 绝对路径 |
| removeFile | 绝对路径 |
| renameFile | 绝对路径 |
| getFileSize | 相对路径和绝对路径 |
基于HTTP协议的网络
在某些情况下,从其他来源获取资源或数据是有帮助的,通常可以通过HTTP请求来实现。
搭建HTTP网络有以下三个步骤:
- 创建
HttpRequest对象:用于封装HTTP请求的相关信息。 - 设置响应回调函数
setResponseCallback():当接收到服务器响应时,该回调函数会被调用,用于处理返回的数据。 - 使用
HttpClient发送HttpRequest:HttpClient负责控制请求的发出,并通过回调接收数据。
HttpRequest 有四种类型:POST、PUT、DELETE 和 UNKNOWN。除非特别指定,默认类型为 UNKNOWN。
以下是 HttpRequest 的简单使用示例:
HttpRequest* request = new (std::nothrow) HttpRequest();
request->setUrl("http://just-make-this-request-failed.com");
request->setRequestType(HttpRequest::Type::GET);
request->setResponseCallback(CC_CALLBACK_2(HttpClientTest::onHttpRequestCompleted, this));
HttpClient::getInstance()->sendImmediate(request);
request->release();
需要注意的是,当接收到响应时,我们需要指定 setResponseCallback() 方法,以便查看返回的数据并根据需要进行处理。以下是回调函数的示例:
void HttpClientTest::onHttpRequestCompleted(HttpClient* sender, HttpResponse* response)
{
if (!response)
{
return;
}
// 输出响应数据
std::vector<char>* buffer = response->getResponseData();
for (unsigned int i = 0; i < buffer->size(); i++)
{
log("%c", (*buffer)[i]);
}
}