【地球人..学习cocos2d-x】学习实践之逐步变强的HelloWorld(下集)

本文介绍如何在Cocos2d-x中使用CCSpriteBatchNode创建高效的HelloWorld应用,包括加载资源、创建批处理节点、添加精灵等关键步骤。同时,演示如何在批量图片中加入关闭按钮,并通过SpriteFrameCache解决图片资源问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【地球人..学习cocos2d-x】学习实践之逐步变强的HelloWorld(下集)

笨木头花心贡献,啥?花心?不呢,是用心~

转载请注明,原文地址
http://blog.youkuaiyun.com/musicvs/article/details/8089125

正文:

上集传送门:http://blog.youkuaiyun.com/musicvs/article/details/8086971

好,继续

先修正上一篇文章的一个错误,在cocos2d-x2.x版本之后,创建精灵的方式由sprite***改为create***(并且几乎其它所有类都有这样的改动,虽然让使用了1.x版本的朋友很无奈,但是这个create还是比sprite**什么的比较形象。

于是,把上次的spriteWithSpriteFrameName改为createWithSpriteFrameName

1. 第三个HelloWorld-使用CCSpriteBatchNode

这个如果把原理抛开的话,很简单:

/* 加载图片资源到SpriteFrame缓存池*/

CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();

cache->addSpriteFramesWithFile("images.plist","images.png");

/* 创建CCTexture2D对象*/

CCTexture2D* texture = CCTextureCache::sharedTextureCache()->textureForKey("images.png");

/* 使用CCTexture2D对象创建BatchNode */

CCSpriteBatchNode* batchNode = CCSpriteBatchNode::createWithTexture(texture);

/* 添加BatchNode到场景*/

this->addChild(batchNode);

CCSize size = CCDirector::sharedDirector()->getWinSize();

/* 创建精灵*/

CCSprite* sprite = CCSprite::createWithSpriteFrameName("p6.png");

sprite->setPosition(ccp(size.width / 2,size.height / 2));

/* 把精灵添加到BatchNode */

batchNode->addChild(sprite);

好像没有什么能解释的,我本身对CCSpriteBatchNode的理解也十分不透彻。只是大概知道,把属于同一张大图片里的所有小图片都放到一个BatchNode对象里,然后给绘制的时候,只提交一次(好像是和OPGL的绘制原理有关的)。既然这是HelloWorld,就不详细研究了。

只要留意一下步骤:

创建用TexturePacker打包图片

->用图片创建Texture2D对象

->Texture2D对象创建SpriteBatchNode对象并添加到场景

->然后创建精灵的时候把精灵添加到SpriteBatchNode里而不是添加到场景里。

运行效果是一样的:

2. 第四个HelloWorld-加入关闭按钮

正常情况下,加入关闭按钮是比较简单的:

CCMenuItemImage *pCloseItem =CCMenuItemImage::create(

"CloseNormal.png",

"CloseSelected.png",

this,

menu_selector(HelloWorld::menuCloseCallback));

menu->addChild(pCloseItem);

就不解释了。

现在的问题是,我们已经把图片都打包在一张大图里了,根本就没有单独的CloseNormal.pngCloseSelected.png。那怎么办?最简单的办法就是没有办法。

噗,开玩笑的,看看代码:

/* 加入关闭按钮-使用图片菜单来实现*/

CCMenuItemImage* closeItemImg = CCMenuItemImage::create();

/* 初始化,先不设置图片*/

closeItemImg->initWithTarget(

this, menu_selector(BatchNodeSceneWithCloseBtn::menuCloseCallback));

/* 设置正常图片-使用SpriteFrame对象*/

closeItemImg->setNormalSpriteFrame(cache->spriteFrameByName("CloseNormal.png"));

/* 设置点击状态图片-使用SpriteFrame对象*/closeItemImg->setSelectedSpriteFrame(cache->spriteFrameByName("CloseSelected.png"));

CCMenu* menu = CCMenu::create(closeItemImg,NULL);

menu->setPosition(ccp(size.width - 50, 50));

this->addChild(menu);

区别就是,initWithTargetsetNormalSpriteFramesetSelectedSpriteFrame这几个函数,主要是setNormalSpriteFramesetSelectedSpriteFrameSpriteFrame已经存在SpriteFrameCache里了,所以我们可以成功地设置按钮的图片。

好了,第一篇学习的实践HelloWorld已经结束了。

我的第二篇学习即将开始,看完之后再和大家分享心得,大家也可以一起去看看,这位大牛写的教程很不错:

http://cn.cocos2d-x.org/bbs/forum.php?mod=viewthread&tid=805

.

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值