在cocos游戏开发中,加载图片有两只方式,ImageViewSprite,这两种方式有什么区别呢?

通过阅读源码,发现ImageView其实是Sprite的封装。以下是UIImageView.cpp的部分源码:

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
void ImageView::initRenderer()
{
_imageRenderer = Scale9Sprite::create();
_imageRenderer->setRenderingType(Scale9Sprite::RenderingType::SIMPLE);

addProtectedChild(_imageRenderer, IMAGE_RENDERER_Z, -1);
}

void ImageView::loadTexture(const std::string& fileName, TextureResType texType)
{
if (fileName.empty())
{
return;
}
_textureFile = fileName;
_imageTexType = texType;
switch (_imageTexType)
{
case TextureResType::LOCAL:
_imageRenderer->initWithFile(fileName);
break;
case TextureResType::PLIST:
_imageRenderer->initWithSpriteFrameName(fileName);
break;
default:
break;
}
//FIXME: https://github.com/cocos2d/cocos2d-x/issues/12249
if (!_ignoreSize && _customSize.equals(Size::ZERO)) {
_customSize = _imageRenderer->getContentSize();
}
this->setupTexture();
}

可以看到_imageRenderer赋值的类型是Scale9Sprite,后续loadTexute也是调用的_imageRendererinitWithFile,也就是说用ImageView最终也是用的Sprite。在封装的过程中,ImageView没有保留Sprite的所有功能,如Polygon,如果需要这些功能的话,得用Sprite,否则,可以混用。

ImageView Sprite
所属包 cocos/ui cocos/2d
设置图片方法 loadTexture setTexture
Pylygon加载 不支持 支持
Cocos Studio中9patch 支持 不支持