请教一个关于CCTexture2D灭火器的使用方法法

用户名:ggin2011
访问量:1108
注册日期:
阅读量:1297
阅读量:3317
阅读量:446544
阅读量:1131843
51CTO推荐博文
static CCSprite* CCSprite::create(const char *pszFileName)的简单分析CCSpriteBatchNoded,CCSpriteFrameCache的简单分析我的版本:cocos2d-2.0-rc2-x-2.0.1本人理解有误之处,希望看官不吝指出。1 static CCSprite* CCSprite::create(const char *pszFileName)的简单分析一个CCSprite对象的主要成员是CCTexture2D对象。create方法产生CCSprite对象的步骤为:先new一个CCSprite对象,然后调用CCSprite的初始化方法:initWithFile(pszFileName)。下面是create方法。CCSprite* CCSprite::create(const char *pszFileName)
CCSprite *pobSprite = new CCSprite();
if (pobSprite && pobSprite-&initWithFile(pszFileName))
pobSprite-&autorelease();
return pobS
CC_SAFE_DELETE(pobSprite);
return NULL;
}而初始化方法的目的主要是填充新产生的CCSprite对象的CCTextture2D成员。这个成员实际上是通过CCTextureCache来获得。下面是初始化方法。bool CCSprite::initWithFile(const char *pszFilename)
CCAssert(pszFilename != NULL, "Invalid filename for sprite");
CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()-&addImage(pszFilename);
if (pTexture)
CCRect rect = CCRectZ
rect.size = pTexture-&getContentSize();
return initWithTexture(pTexture, rect);
// don't release here.
// when load texture failed, it's better to get a "transparent" sprite then a crashed program
// this-&release();
}CCTextureCache::sharedTextureCache()-&addImage(pszFilename)获得CCTexture2D对象的过程:通过pszFilename查询CCTextureCache内部保存的所有CCTexture2D对象,如果有,则直接返回,没有,则生成一个。如果是新生成一个CCTexture2D对象,那么就会涉及到读文件操作。2 CCSpriteBatchNoded,CCSpriteFrameCache的简单分析CCSpriteBatchNoded的一般使用方法是:利用CCSpriteFrameCache添加plist文件,然后通过CCSpriteFrameByName引用。下面是添加方法。void CCSpriteFrameCache::addSpriteFramesWithFile(const char* plist, const char* textureFileName)
CCAssert(textureFileName, "texture name should not be null");
CCTexture2D *texture = CCTextureCache::sharedTextureCache()-&addImage(textureFileName);
if (texture)
addSpriteFramesWithFile(plist, texture);
CCLOG("cocos2d: CCSpriteFrameCache: couldn't load texture file. File not found %s", textureFileName);
}添加的方法是:通过CCtextreCache获得plist文件对应的大图的CCTextrue2D。之后通过plist文件所记录的信息,把大图逻辑上拆分成多个共享CCTextrue2D的CCSpriteFrame,并以键值对的形式保存在CCSpriteFrameCache里面。获得CCSpriteFrame的方法是:通过CCSpriteFrameCahce的CCSpriteFrameByName方法,来找到对应的CCSprieteFrame。这个时候,每次产生的CCSpriteFrame都是之前那张大图,只是逻辑上是获得该大图的不同区域而已。使用CCSpriteBatchNoded的主要目的是优化性能。主要注意点:1 添加到ccspriteBatchNode里面的精灵的纹理必须与产生CCSpriteBatchNode对象的纹理是同样的。2 添加到ccspriteBatchNode里面的精灵的深度相对于外部都是一样的,如果要有不同深度的效果,那么可能要放置在不同的ccspriteBatchNode里面来实现。
了这篇文章
类别:未分类┆阅读(0)┆评论(0)温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(12896)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'Cocos2dx 加载动画教程之帧动画',
blogAbstract:'',
blogTag:'cocos2d',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:2,
permalink:'blog/static/',
commentCount:3,
mainCommentCount:2,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}您所在的位置: &
3.5.2 CCTexture2D、CCTextureCache和CCTextureAtlas
3.5.2 CCTexture2D、CCTextureCache和CCTextureAtlas
王寒/屈光辉/周雪彬
机械工业出版社
《Cocos2D权威指南》第3章Cocos2D核心类,本章主要分析第2章代码示例,同时向大家展示构成Cocos2D的核心类如何组织在一起并构成一个完整的游戏。本节为大家介绍CCTexture2D、CCTextureCache和CCTextureAtlas。
3.5.2 CCTexture2D、CCTextureCache和CCTextureAtlas
在Cocos2D中,使用CCTexture2D(纹理)从图片、文本或源数据中创建OpenGL 2D纹理,所创建的纹理对象使用2的乘方来填充。根据创建CCTexture2D对象的方法不同,纹理的真实图片大小可能和纹理大小略有差异。另外需要注意的是,纹理内容通常是上下颠倒的!关于该类的更多内容,可以参考CCTexture2D.h。
CCTextureCache(纹理缓存)作为单例使用,用于加载和管理纹理。一旦纹理加载完成,下次使用时可使用它返回之前加载的纹理,从而减少对GPU和CPU内存的占用。关于该类的更多内容,大家可以参考CCTextureCache.h。
CCTextureAtlas(纹理图集)用来实现纹理图集。纹理图文件可以是PVRTC、PNG或任何Texture2D所支持的文件类型。CCTextureAtlas(纹理图集)可以对纹理图集的矩形进行实时的更新、添加、删除或重排序。关于该类的更多内容,大家可以参考CCTextureAtlas.h。
在Cocos2D的开发中,CCTexture2D和CCTextureCache在多个方法中都有体现,以CCSprite类的初始化方法之一为例:-(id)&initWithFile:(NSString*)filename&rect:(CGRect)rect &{ &&&&&&NSAssert(filename!=nil,&@"Invalid&filename&for&sprite"); &&&&&&&CCTexture2D&*texture&=&[[CCTextureCache&sharedTextureCache]&addImage:&filename]; &&&&&&if(&texture&) &&&&&&&&&&&&return&[self&initWithTexture:texture&rect:rect]; &&&&&&[self&release]; &&&&&&return& &}&
以上方法中使用CCTextureCache的单例将图片文件添加到纹理缓存中,并创建一个CCTexture2D纹理对象。如果该纹理对象存在,则使用initWithTexture方法来创建精灵对象。initWithTexture的方法实现如下: -(id)&initWithTexture:(CCTexture2D*)texture&rect:(CGRect)rect &{ &&&&&&NSAssert(texture!=nil,&@"Invalid&texture&for&sprite"); &&&&&&//&IMPORTANT:&[self&init]&and&not&[super&init]; &&&&&&if(&(self&=&[self&init])&) &&&&&&{ &&&&&&&&&&&&[self&setTexture:texture]; &&&&&&&&&&&&[self&setTextureRect:rect]; &&&&&&} &&&&&&return& &}&
上述方法中指定用于渲染精灵对象的纹理,以及矩形大小。【责任编辑: TEL:(010)】&&&&&&
关于&&的更多文章
本书详细介绍了cocos2d游戏引擎,关注的是创建完整cocos2d游戏的
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
高效管理SQL Server的提示、技巧和解决方案
不管是创建桌面程序、构建Web应用或是开发自己的Windo
多年来,Imar Spaanjaars一直是ASP.NET相关图书的畅销
本书是目前所能找到的最实用、最全面的Linux指南和参考手册,也是唯一一本提供以下全部内容的书籍:
更好更实用的示例覆盖了实
51CTO旗下网站

我要回帖

更多关于 if函数的使用方法 的文章

 

随机推荐