Cocos2d-x对精灵的优化

COCOS学习--精灵(5) 精灵 1.Sprite精灵类 精灵在COCOS里是一个非常重要的概念,我的理解是精灵就是一个多用途的对象。可以作为按钮,作为背景,作为动画效果。主要是以图像的形式呈现出来的。 1.1 创建Sprite精灵 创建精灵对象的方法由很多中,主要就是create函数及其衍生。在我的代码里由很多关于精灵的创建,这里就不一一举例了。 这里放一个通过纹理对象创建Sprite对象的例子 auto ... 阅读详情

cocos2dx针对游戏设计的不同方面会有不同的优化方案,可以对声音,对内存,对图片格式,对色彩等等进行优化。有关这些方面的方法请大家查找其他的文章。我今天要说的是如何对精灵进行优化,程序中我们用到 的最多的就是精灵,大到背景、UI,小到 NPC、道具,只要是用图片展示的,都是精灵或它的子类。精灵是什么,在我看来精灵就是一张纹理图片,是按某种方式显示出来的图片。精灵如此的重要,我们 当然要好好的优化优化了。我们可以减小精灵图片的大小,使用缓存Cache的方法将精灵提前加载到内存中,当有很多精灵的时候,使用批次渲染的方法。所以 我就从缓存和批次渲染这俩个方面来说一下如何优化我们的精灵图片。

1、 通过批次渲染的方法来优化精灵。在游戏中的某一时刻,有时候会用到大量的精灵,比如说发射子弹,粒子效果,这些精灵图片所使用的纹理都是相同的,如果一张 一张的图片进行渲染势必会降低效率,大家在开发中看到的窗口的左下角的三行数字中,第一行数字就是渲染批次,这个渲染批次在我看来就是画了多少 次,cocos2dx中使用opengl进行绘图,渲染的批次越少当然越好了,所以这个渲染批次才会显示在左下角让我们参考。我们应当尽量的减小这个渲染 的批次,提高游戏的效率。方法就是使用CCSpriteBatchNode和CCParticleBatchNode精灵批节点类和粒子批节点类。先来看 看在代码中如何使用它们。


1
2
3
4
5
6
7
8
CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
//创建了十个精灵将这十个精灵添加到当前的层中
for (int i=0;i<10;i++)
{
     CCSprite * sprite = CCSprite::create( "icon.png" );
     sprite->setPosition(ccp(CCRANDOM_0_1()*visibleSize.width,CCRANDOM_0_1()*visibleSize.height));
     this ->addChild(sprite);
}

2014-03-29_100112

上边的这种情况是采用一般的方式将精灵添加到层中的,这个时候的渲染批次是10。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//创建一个CCSpriteBatchNode,传入的参数就是精灵们将要用到的图片
     CCSpriteBatchNode * batchNode = CCSpriteBatchNode::create( "icon.png" );
     //或者使用texture2d初始化,里边传入一个texture
     //CCSpriteBatchNode * batch = CCSpriteBatchNode::createWithTexture();
     //这一句写不写都可以,因为node的默认坐标就是(0,0)
     batchNode->setPosition(CCPointZero);
     for (int i=0;i<10;i++)
     {
         //创建的这些精灵所使用的纹理必须和CCSpriteBatchNode相同,而且所有这些精灵必须在同一个渲染层
         CCSprite * sprite = CCSprite::createWithTexture(batchNode->getTexture());
         sprite->setPosition(ccp(CCRANDOM_0_1()*visibleSize.width,CCRANDOM_0_1()*visibleSize.height));
         batchNode->addChild(sprite);
     }
     this ->addChild(batchNode);

2014-03-29_100342

采 用上边的方法添加精灵到层中,渲染批次是1,就是因为我们用到了CCSpriteBatchNode这个类,从道理上来说,这个类也是一个node,通常 我们使用node的时候就是为了方便的管理精灵,创建一个node节点,然后将精灵放到这个节点中,而node本身是没法显示出来的,显示出来的东西是放 到它里边的node子节点,node的长和宽都是0,坐标默认是在父节点的左下角也就是原点处。所以对子节点位置的设置不会产生影响。 CCSpriteBatchNode就是这样的一个node,不同的是创建的时候需要一个纹理,要不怎么叫sprite node呢?里边传入的纹理图片是子节点用到的纹理图片,我们可以设置好这些子精灵节点的坐标,然后添加到这个node中,这个node再添加到其他的层 中,这样就可以批次渲染了。这个node要求它的字精灵节点和它使用相同的纹理,那如果纹理不一样怎么办,那就把纹理都打包到一张图片上,用的时候从这张 图片上截取,工具可以使用texturepacker。

1
2
3
4
5
6
7
8
9
CCTexture2D * texture = CCTextureCache::sharedTextureCache()->addImage( "fire.png" );
     for (int i=0;i<10;i++)
     {
         //CCParticleSun里边没有参数
         CCParticleSystem * particle = CCParticleSun::create();
         particle->setTexture(texture);
         particle->setPosition(ccp(CCRANDOM_0_1()*visibleSize.width,CCRANDOM_0_1()*visibleSize.height));
         this ->addChild(particle);
     }
2014-03-29_101808
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
CCTexture2D * texture = CCTextureCache::sharedTextureCache()->addImage( "fire.png" );
     //参数同样需要一张纹理图片
     CCParticleBatchNode * particleBatch = CCParticleBatchNode::createWithTexture(texture);
     //也可以采用如下的方式创建
     //CCParticleBatchNode * particleBatch = CCParticleBatchNode::create("fire.png");
     for (int i=0;i<10;i++)
     {
         //CCParticleSun里边没有参数
         CCParticleSystem * particle = CCParticleSun::create();
         //传入的texture必须和CCParticleBatchNode相同
         particle->setTexture(texture);
         particle->setPosition(ccp(CCRANDOM_0_1()*visibleSize.width,CCRANDOM_0_1()*visibleSize.height));
         particleBatch->addChild(particle);
     }
     this ->addChild(particleBatch);
2014-03-29_102109

这里的道理是和CCSpriteBatchNode相同的,就不用解释了吧。

2、 使用缓存提前加载精灵。当我们使用纹理的时候可以制作一个loading界面,将将要用到的纹理加载到缓存中,同时将它们的引用计数增加一,以便这些纹理 不会被释放。用的时候直接从缓存中取就可以了,这样也可以提高效率。我们用到的缓存类有CCTextureCache、 CCSpriteFrameCache、CCAnimationCache,下面分别说明其用法。

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
40
41
42
43
44
45
46
47
48
49
50
51
bool HelloWorld::init()
{
     //////////////////////////////
     // 1. super init first
     if ( !CCLayer::init() )
     {
         return false ;
     }
 
     CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
     //缓存其实就是一个数组,把用到的纹理图片放到这个数组中,纹理的引用计数加1,这样的话就不会释放纹理图片了
     //等下一次使用的时候直接从这个数组中取就可以了,这样的话就不必再次加载到内存中了
     CCTexture2D * texture = CCTextureCache::sharedTextureCache()->addImage( "icon.png" );
     CCLog( "%d" ,texture->retainCount()); //count=1
     //使用如下俩种方法可以获得缓存中的纹理,第二种方法如果之前已经加载了纹理,这个时候不会重新加载
     //而是直接返回
     texture = CCTextureCache::sharedTextureCache()->addImage( "icon.png" );
     texture = CCTextureCache::sharedTextureCache()->textureForKey( "icon.png" );
     CCLog( "%d" ,texture->retainCount()); //count=1
 
     //异步加载图片,开辟一个新的线程专门用来加载图片,加载完毕以后调用loadingCallBack函数
     //所以在这个init函数中是不应该去调用函数textureForKey的,因为你不知道是否加载好了纹理啊
     CCTextureCache::sharedTextureCache()->addImageAsync( "icon1.png" ,
         this ,callfuncO_selector(HelloWorld::loadingCallBack));
 
     return true ;
}
//object就是加载好了的纹理
void HelloWorld::loadingCallBack(CCObject * object)
{
     CCTexture2D * texture = (CCTexture2D *)object;
     CCLog( "%d" ,texture->retainCount()); //count=2
     //通过以下的方法取得的texture和上边的那个texture相同
     //CCTexture2D * texture2 = CCTextureCache::sharedTextureCache()->textureForKey("icon1.png");
     //CCLog("%d",texture2->retainCount());
 
     //会清除掉所有的纹理,在其他的地方不可以再引用这些纹理了
     CCTextureCache::sharedTextureCache()->removeAllTextures();
 
     //以下的方法会remove掉count值为1的纹理,icon.png被remove掉了,个人认为实际用的时候就用这个
     //CCTextureCache::sharedTextureCache()->removeUnusedTextures();
 
     //count=1
     CCLog( "%d" ,texture->retainCount());
 
     //查看纹理清除的信息
     CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
 
     //切换场景
     CCDirector::sharedDirector()->replaceScene(TestScene::scene());
}
在新的场景中使用加载好的纹理。
1
2
3
4
5
6
7
8
bool TestScene::init()
{
     //因为将所有的纹理清除掉了,所以这里引用的时候会出错
     CCTexture2D * texture = CCTextureCache::sharedTextureCache()->textureForKey( "icon1.png" );
     CCLog( "%d" ,texture->retainCount());
 
     return true ;
}
CCTextureCache 在我看来就是一个数组,将加载的纹理都放到这个数组中,然后将它们的引用计数加1以防释放掉,我们要使用加载好的纹理直接从这个数组中取就可以了,返回一 个CCTexture2D的对象,然后我们使用CCSprite:createWithTexture这个方法来创建出精灵。我觉的这里最主要的问题就是 纹理的释放,个人认为使用removeUnusedTexture这个函数比较好,它会释放掉引用计数为1的纹理,也就说明程序中没有再为它增加引用计 数,肯定是没用了。那些大于1的纹理不会释放掉,即使我们在不知道的情况下再次加载,也只是返回已经加载好了的。接下来是另外俩个缓存了,和这个意思差不 多,直接看代码吧。
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
40
41
42
bool HelloWorld::init()
{
     //////////////////////////////
     // 1. super init first
     if ( !CCLayer::init() )
     {
         return false ;
     }
 
     CCSize visibleSize = CCDirector::sharedDirector()->getVisibleSize();
     //可以使用texturepacker生成.plist文件,将plist文件和png文件放到资源目录下,通过add方法将ghosts.plist纹理
     //加载到了缓存中
     CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile( "ghosts.plist" );
 
     //spriteFrameByName中传入的参数可以到.plist文件中查看,通过这个方法可以从缓存中获得一个精灵帧
     CCSpriteFrame * spriteFrame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName( "child1.gif" );
     CCLog( "%d" ,spriteFrame->retainCount()); //count=1
     //之所以创建精灵帧就是为了播放动画做准备的,这里可以是一个循环不到的创建精灵帧然后添加到animation中
     //关于这部分的内容可以查看我前边的文章,这里是为了说明缓存的使用
     CCAnimation * animation = CCAnimation::create();
 
     animation->addSpriteFrame(spriteFrame);
     CCLog( "%d" ,spriteFrame->retainCount()); //count=2
 
     CCLog( "%d" ,animation->retainCount()); //count=1,这个1是创建时候的引用计数
     //动画缓存,将animation放到缓存中,里边存入一个key,方便以后取出,如果不把动画放到这个缓存中,下一帧的时候
     //动画就会被释放掉的,再播放动画就会出错了
     CCAnimationCache::sharedAnimationCache()->addAnimation(animation, "a" ); //count=2
     CCLog( "%d" ,animation->retainCount());
 
     CCAnimate * animate = CCAnimate::create(CCAnimationCache::sharedAnimationCache()->animationByName( "a" ));
 
     //当不再需要播放动画的时候从动画缓存中清除,应该先清除动画再清除精灵帧
     CCAnimationCache::sharedAnimationCache()->removeAnimationByName( "a" );
 
     //将引用计数为1的精灵帧从缓存中清除
     CCSpriteFrameCache::sharedSpriteFrameCache()->removeUnusedSpriteFrames();
     //释放掉所有的精灵帧
     //CCSpriteFrameCache::sharedSpriteFrameCache()->removeSpriteFrames();
 
     return true ;
}

原文:http://cocos2d.9tech.cn/news/2014/0408/40171.html

ITKMontage---ITK自动拼接模块 本文分享ITK中Remote中的ITKMontage拼接模块,希望对各位小伙伴有所帮助!1. ITKMontage介绍在医疗图像处理过程中,图像拼接有很多用处,比如DR图像的拼接。ITKMontage可以快速稳定的处理数据量较大的拼接图像。强度不均匀性校正配准全局优化融合2. ITKMontage安装ITKMontageITKMontage可脱离ITK进行单独安装,也可在ITK安装时作为模块进行安装。单独安装ITK模块安装在ITK编译时,选择ITKMontage模块。 阅读详情

相关推荐

单相PWM整流器的数学模型、工作原理

单相PWM整流器的数学模型、工作原理

weixin_58670090的博客 1万+

cocos3.0使用cocostudio动画帧结合地图键值创建精灵

#include "cocos2d.h" #include "cocostudio/CocoStudio.h" //精灵猫和其他精灵的tag typedef enum{ catTag =1, }; //cocostudio 动画帧tag typedef enum{ catWalkTag = 1001, }; class Base :public cocos2d::Layer...

Oo泡泡糖oO的专栏 320

别再手动配IP了!用NI-USRP Configuration Utility快速搞定USRP 2954与LabVIEW连接

本文详细介绍了如何使用NI-USRP Configuration Utility快速配置USRP 2954与LabVIEW的连接,解决传统手动IP配置的繁琐问题。通过图形化工具自动完成设备发现、IP设置和连接验证,大幅提升软件无线电实验效率,特别适合信号收发应用场景。

weixin_27102543的博客 291

cocosLua 之cocosStudio动画

动画制作 通过编译器可以对某个控件进行动画制作, 实现倾斜,缩放,移动等动画的实现,甚至可实现帧动画相关。大概步骤如下: 添加 + 号按钮添加动画名,设定名称,起始帧,结束帧。 设定成功后, 在-- ALL -- 中选择自己设定的动画相关 选定动画后,千万注意勾选上开始记录动画,添加帧 使用 + 号按钮可添加多个不同的动画, 可通过动画列表进行管理 这样做的优点:通过动画名播放指定的动画比通过帧数播放更容易让人理解。 另外注意: 设定多个动画名的情况下,结束帧数不要与下个动画名的起始帧数

鹤九日的博客 3252

模型瘦身术:YOLOv5无损剪枝实战教程

本文介绍了一种YOLOv5模型的无损剪枝方法,通过"稀疏训练+结构化剪枝+微调"的流程,在不损失精度的前提下显著减小模型尺寸并提升推理速度。具体步骤包括:1)稀疏训练给参数排优先级;2)裁剪不重要通道;3)微调恢复精度;4)验证效果。实战部分详细展示了从环境搭建到剪枝实现的完整流程,并分析了剪枝后在边缘设备部署、实时检测等场景的优势。该方法可使YOLOv5s模型从14MB缩减至2-3MB,推理速度提升30%-50%,适用于资源受限设备的轻量化部署需求。

LXY_LOVE36的博客 104

第154章 点云大规模并行处理(GPU加速)

优化点云处理✨ 使用。

yumeiguo的博客 374

cocos 性能优化

cocos 性能优化分为四部分:渲染优化、包体优化、内存优化和cpu优化 首先是渲染优化 1、合图 静态合图:使用Texture Packer或者自动图集,将碎图打包到一张图集里 动态合图:在精灵资源的属性检查器中勾选packable(默认勾选)才能开启动态合图,小游戏和原生平台默认关闭动态合图,需要手动开启。 2、节点的显示和隐藏少用active的true或者false,active的使用会重新渲染节点数,可以用位置或者透明度来代替。 3、减少draw call的次数。d...

qq_39325197的博客 3430

【数据集】基于ubESTARFM法的100m 地温LST数据集(澳大利亚)

【数据集】基于ubESTARFM法的100m 地温LST数据集(澳大利亚)

WW、forever的博客 264

cocos2dx对精灵的优化

cocos2dx针对游戏设计的不同方面会有不同的优化方案,可以对声音,对内存,对图片格式,对色彩等等进行优化。有关这些方面的方法请大家查找其他的文章。我今天要说的是如何对精灵进行优化,程序中我们用到的最多的就是精灵,大到背景、UI,小到 NPC、道具,只要是用图片展示的,都是精灵或它的子类。精灵是什么,在我看来精灵就是一张纹理图片,是按某种方式显示出来的图片。精灵如此的重要,我们当然要好好的优

u010944926的专栏 792

【第07例】IPD体系进阶: 6 个技术评审点(TR)

TR技术评审点

产品线负责人 4411

基于Transformer模型实现交通流量时序预测(PyTorch版)

Transformer模型,作为一种基于自注意力机制的深度学习模型,最初在自然语言处理领域取得了突破性进展,其出色的长距离依赖关系捕捉能力使其在处理时序数据时也表现出色。将Transformer模型应用于交通流量时序预测,可以充分利用其优势,实现对交通流量更加精准、高效的预测。

时序笔记 2569

【Cocos2d-x】Cocos2d-x精灵的性能优化

Cocos2d-x精灵的性能优化-使用纹理图集和精灵帧缓存 使用纹理图集 纹理图集(Texture)也称为精灵表(Sprite Sheet) 使用纹理图集的优点: 1、减少文件读取次数,读取一张图片比读取一推小文件要快 2、减少OpenGL ES绘制调用并且加速渲染 OpenGL ES 1.1仅仅能够使用2...

weixin_33919950的博客 320

超详细的Burp Suite安装使用

‌Burp Suite是一个强大的Web应用安全测试工具,适用于网络安全专业人士进行自动化网络应用程序的安全测试。‌ 它提供了在Windows和Kali Linux上安装和激活Burp Suite Professional的简便步骤,帮助用户快速集成并启用强大的网络扫描和渗透测试功能。Burp Suite的特点包括易于安装、良好的兼容性、内置的自动化工具、优秀的用户体验以及详细的教程,使得无论是安全领域的新手还是经验丰富的专家,都能轻松上手并高效地进行安全测试。此外,Burp Suite还支持扩展功能的使用

Dreams°的博客 2640

【爱上cocos2d-x之八】使用CCSpriteBatchNode优化绘制一批相同的精灵

当我们要加载一批相同的精灵时,如果采用单独绘制的话,代码如下: //创建很多个小精灵 for(int i=0;i<1000;++i) { CCSprite* sprite=CCSprite::create("CloseNormal.png"); sprite->setPosition(ccp(CCRANDOM_0_1()*480,CCRANDOM_0_1()*320));

三十画生 一个北漂的人 8500

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

coco2dx精灵和背景遮挡_Cocos2d-x精灵的性能优化——使用纹理图集和精灵帧缓存...

使用纹理图集纹理图集(Texture)也称为精灵表(Sprite Sheet)使用纹理图集的优点:1、减少文件读取次数,读取一张图片比读取一推小文件要快2、减少OpenGL ES绘制调用并且加速渲染OpenGL ES 1.1仅仅能够使用2的n次幂大小的图片(即宽度或者高度是2、4、8、64…)。如果采用小图片OpenGL ES1.1会分配给每个图片2的n次幂大小的内存空间,即使这张图片达不到这样的...

weixin_36208880的博客 366

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Cocos2d-X 基础 | Sprite 详解

什么是精灵(Sprite)?游戏中的主角、敌人都可能是一个精灵,但并不是所有的图形对象都是一个精灵,只有你能控制它,它才是一个精灵,如果无法控制,那就只能是一个节点。准确来说,精灵是一个能通过改变自身属性:位置、旋转、缩放、倾斜、颜色和透明度等,变成可控制的 2D 图像。 1.精灵的创建方法 可以使用一张图片来创建一个精灵,除此之外还可以使用图集或者精灵缓存来创建。 1.1通过指定图片...

测试开发小白变怪兽 2369

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

cocos2d-x利用精灵表和纹理缓存实现优化

//采用缓存CCSpriteBatchNode缓存添加9000个精灵 void GameOverLayer::createSpriteUseCache() {     CCSize size = CCDirector::sharedDirector()->getVisibleSize();     CCSpriteBatchNode* batchNode = CCSpriteBatchNo

快乐悍马2013的专栏 1027

cocos2d-x 内存优化之prv.ccz plist 文件加载

我在项目中遇到的问题解决了,我想总结的却说不出来,还好有人替我表达了。原文链接:http://www.himigame.com/iphone-cocos2d/465.html   首先对于使用过精灵的童鞋很熟悉CCSpriteBatchNode,至少大家都会知道它能优化精灵,但是至于优化原理这里简单说下: 一般使用精灵CCSprite的时候,都是直接使用[CCLayer* addChild:

yhhwatl的专栏 2644

cocos2d-x-lua:API-sprite

精灵: 通过图片,纹理,帧来创建,通常精灵表示一张图片 --create bg local bg = cc.Sprite:create("background.png") bg:setPosition(size.width/2,size.height/2)

sylalak123的博客 808

cocos2d-x 游戏开发----给单个精灵绑定点击事件

在cocos2d-x游戏开发过程中.经常会遇到处理单个精灵被用户点击的问题。 一般情况下我们都是抓取单个场景中的点击事件根据坐标判断,遍历所有精灵,看是否存在点击的坐标和精灵的区域有碰撞。这种方法在精灵多了之后很费时,在学习testcpp的例子代码后发现一个很好的方法解决。就是继承 "CCTargetedTouchDelegate" 类,使精灵也有接收点击事件的功能,并且在精灵销毁时移除注册的

lkysz0000的专栏 2352

Cocos2d-x-3.10 SpriteBatchNode渲染

Cocos2d-x-3.10 为了降低渲染批次,专门建立的一个管理精灵的类,可优化程序。

TX98337的博客 372

cocos2d-x初学笔记14:精灵表

可能大家会发现TestCpp项目运行起来后,在主界面的菜单里面有一个名为“ZwopTexTest”的菜单选项,点击打开后我们会看到界面中有两个小人在跳舞。我们先来了解一下ZwopTex是什么东西。       ZwopTex是一个在线制作精灵表的工具,它可以很方便的创建.plist文件。那么什么是精灵表呢?它又有什么作用?       我们在讲人物动画的那一篇文章中,实现了一个小人在屏幕中央跳

路上的点滴 2858

Cocos2d-x基础示例 精灵移动3

Cocos2d-x精灵移动3 OK,承接上讲,我们先插播个上节遗漏的问题。 我们上节重载了CCPoint的*号,使之能乘以一个float型后计算每次调用的偏移量。后来想了下,如果这个*号后来和int相乘要肿么办呢?我稍微骚了一下,把这个重载函数改装成了一个模板重载函数,代码如下          //    //定义模板,因为未来的speed有可能是不同类型的~     template

畏天命的故纸堆 4411

Cocos2dx对精灵的优化

原文:http://www.cocoachina.com/bbs/read.php?tid=196135 cocos2dx针对游戏设计的不同方面会有不同的优化方案,可以对声音,对内存,对图片格式,对色彩等等进行优化。有关这些方面的方法请大家查找其他的文章。我今天要说的是如何对精灵进行优化,程序中我们用到的最多的就是精灵,大到背景、UI,小到 NPC、道具,只要是用图片展示的,都是精灵或它的子

IT一分子 1224

cocos2d-x(精灵类)

精灵类CCSprite 是一张二维的图片对象,它可以用一张图片或者一张图片的一块矩形部分来定义。 类继承:   纹理贴图集是将我们需要的部分图片放在一张大小固定的图片,可以节约内存。因为OpenGL 机制会把单张图处理成相应大小的长宽都是2 的n 次方的图片,所以把图片放在一起可以节约空间。   贴图类CCTexture2D: 贴图类CCTexture2

凉茶的优快云专栏 1198
上一篇: Cocos2d-x中判断点击命中的几种方法
下一篇: Cocos2d-x项目过程中遇到的一些问题总结
tspangle
博客等级 码龄19年 81粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值