很棒! 我们现在读到的是最后一章的内容。好样的!现在,你应该能够比较容易地用Cocos2d-x来制作你的游戏了。但是请记住,你的创造力拥有着无限可能。本章涵盖了一些进阶的概念。注意,本章在内容和形式上都变得会更加专业一些。

文件系统访问

尽管你可以使用stdio.h头文件中的函数来访问文件,但这种方式是不太方便的,原因是:你需要激活系统特定的API接口来获取文件的完整地址。在安卓系统上安装之后,资源都被打包成了.apk文件。*希望能够基于分辨率自动加载资源(如一张图片)。

创建FileUtils类正是为解决这些问题。FileUtils是在Resources下访问文件的一个辅助类。它可以文件中读取数据和检查文件是否存在。

读取文件内容的函数

这些函数会读取不同类别的文件并返回不同的数据类型:

| function name | return type | support path type |

| getStringFromFile | std::string | relative path and absolute path |

| getDataFromFile | cocos2d::Data | relative path and absolute path |

| getFileDataFromZip | unsigned char* | absolute path |

| getValueMapFromFile | cocos2d::ValueMap | relative path and absolute path |

| getValueVectorFromFile | cocos2d::ValueVector | relative path and absolute path |

管理文件及目录的函数

这些函数能够管理文件或者目录:

| function name | support path type |

| isFileExist | relative path and absolute path |

| isDirectoryExist | relative path and absolute path |

| createDirectory | absolute path |

| removeDirectory | absolute path |

| removeFile | absolute path |

| renameFile | absolute path |

| getFileSize | relative path and absolute path |

基于HTTP协议的网络

有些时候,从其他的来源获取资源或者数据也可能是有帮助的。通常采用HTTP请求的方法来实现。

搭建HTTP网络有三个步骤:

1.建立一个HttpRequest。

2.建立一个setResponseCallback()回调函数来回应请求。

3.使用HttpClient发送HttpRequest。

HttpRequest拥有四种类型:POST, PUT, DELETE, UNKNOWN。除非指定,默认的类型都是UNKNOWNHTTPClient控制请求的发出,并且通过回叫来接收数据。

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;
      }

      // Dump the data
      std::vector<char>* buffer = response->getResponseData();

     for (unsigned int i = 0; i <buffer-> size (); i ++)
      {
        log ("% c", (* buffer) [i]);
      }
}

英文原址:http://cocos2d-x.org/programmersguide/14/