前言
Cocos2d-x
默认不支持加载网络图片,而加载网络图片是一个常见的需求,本文简单的实现了加载网络图片。
加载网路图片
加载一张网络图片需要以下几个步骤
- 从网络上把图片的二进制数据下载下来
- 使用图片的二进制数据创建
Image
对象
- 用创建好的
Image
对象初始化 Texture2D
对象
- 使用
Texture2D
对象创建一个精灵
- 把精灵添加到节点中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
auto request = new cocos2d::network::HttpRequest();
request->setUrl(url);
request->setRequestType(cocos2d::network::HttpRequest::Type::GET);
request->setResponseCallback([=](cocos2d::network::HttpClient* client,
cocos2d::network::HttpResponse* response) {
if (!response) {
return;
}
if (!response->isSucceed()) {
return;
}
std::vector<char> data;
auto responseData = response->getResponseData();
data.assign(responseData->begin(), responseData->end()); // 获取二进制数据
auto image = new Image(); // 创建 Image对象
image->initWithImageData(reinterpret_cast<unsigned char*>(data.data()), data.size()); // 填充图片数据
auto texture = new Texture2D();
bool isImage = texture->initWithImage(image); // 使用 Image 初始化 Texture2D
if (!isImage) {
texture->release();
image->release();
return ;
}
auto sprite = Sprite::createWithTexture(texture); // 使用 Texture2D 创建精灵
sprite->setContentSize(Size(200, 200));
sprite->setAnchorPoint(Vec2(0, 0));
addChild(sprite); // 把精灵添加到节点中
texture->release();
image->release();
});
cocos2d::network::HttpClient::getInstance()->sendImmediate(request);
request->release();
|
总结
通过以上的步骤,就可以在 Cocos2d
中加载网络图片并显示出来。
可以看到加载一张网络图片还是比较麻烦的,最好是自己封装一下,不然要用的地方每次都写一遍非常不好维护。
参考