精灵:Cocos2d中的精灵和其他游戏引擎中的精灵相似,它可以移动,旋转,缩放,执行动画,并接受其他转换。
Cocos2dx的Sprite(精灵)由Texure,frame和animation组成,由openes负责渲染。主要的类关系如下: 简单过程可描述为:使用Texture2D加载图片,可以用Texture2D生成对应的SpriteFrame(精灵帧),将SpriteFrame添加到Animation生成动画数据,用Animation生成Animate(就是最终的动画动作),最后用Sprite执行这个动作。
建立一个工程,工程文件结构如下图所示 解决方案中的结果
然后在Resource文件夹中添加一张png格式的图片
在Sprite.h文件中添加下面的代码
#ifndef _Sprite_H_
#define _Sprite_H_
//防止代码重包含
#include "cocos2d.h"
USING_NS_CC;
class Sprite : public CCLayer
{
public:
//创建一个场景
static CCScene* scene();
//初始化场景
bool init();
//菜单回调函数
void menuCloseCallback(CCObject* pSender);
//用于创建创建、精灵、或者层(同create())
CREATE_FUNC(Sprite);
};
#endif
将AppDelegate.cpp中bool AppDelegate::applicationDidFinishLaunching() 中的
// create a scene. it's an autorelease object
CCScene *HelloWorld = Sprite::scene();
改成
// create a scene. it's an autorelease object
CCScene *pScene = Sprite::scene();
Sprite.cpp中的代码
#include "Sprite.h"
#include "HelloWorldScene.h"
CCScene* Sprite::scene()
{
//创建一个场景
CCScene* s = CCScene::create();
//创建一个层
Sprite* layer = Sprite::create();
//将层加到场景中
s->addChild(layer);
//返回场景
return s;
}
//初始化精灵
bool Sprite::init()
{
}
创建精灵的方式:
1、通过文件创建精灵
过程:调用 CCLayer::init()->>>创建精灵->>将精灵加到场景中->>获取窗口的大小->>设置精灵在场景显示的位置
//先调用父类的init函数
CCLayer::init();
//通过文件创建精灵
CCSprite* sprite = CCSprite::create("aaaa.png");
//将精灵添加到场景中
addChild(sprite);
//获取窗口的大小
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
//设置显示精灵的位置(设置成精灵在场景的中间显示)
sprite->setPosition(CCPoint(winSize.width / 2, winSize.height / 2));
return true;
将代码放到Sprite.cpp下的bool Sprite::init()中编译运行:程序的执行结果如下
2、通过纹理创建精灵
过程:调用CCLayer::init()->>创建纹理->>通过纹理创建精灵->>将精灵添加到场景中->>获取窗口的大小->>设置精灵在场景中显示的位置
程序代码:
<span style="color:#000000;"> //先调用父类的init函数
CCLayer::init();
//创建纹理
CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage("aaaa.png");
//通过纹理创建精灵
CCSprite* sprite = CCSprite::createWithTexture(texture);
//将精灵添加到场景中
addChild(sprite);
//获取窗口的大小
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
//设置显示精灵的位置(设置成精灵在场景的中间显示)
sprite->setPosition(CCPoint(winSize.width / 2, winSize.height / 2));
return true;</span>
将代码放到Sprite.cpp下的bool Sprite::init()中编译运行:程序的执行结果如下
3、通过精灵帧创建精灵
过程:调用CCLayer::init()->>创建纹理->>得到纹理的大小->>创建精灵帧->>创建精灵->>将精灵添加到场景中->>获取窗口的大小->>设置精灵在场景中显示的位置
程序代码:
//先调用父类的init函数
CCLayer::init();
//创建纹理
CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage("aaaa.png");
//得到纹理大小
CCSize size = texture->getContentSize();
//创建精灵帧
CCSpriteFrame* frame = CCSpriteFrame::createWithTexture(texture, CCRectMake(size.width/4,size.height/4, size.width/2, size.height/2));
//创建精灵
CCSprite* sprite = CCSprite::createWithSpriteFrame(frame);
//将精灵添加到场景中
addChild(sprite);
//获取窗口的大小
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
//设置显示精灵的位置(设置成精灵在场景的中间显示)
sprite->setPosition(CCPoint(winSize.width / 2, winSize.height / 2));
return true
将代码放到Sprite.cpp下的bool Sprite::init()中编译运行:程序的执行结果如下
4、通过精灵帧缓存创建精灵
过程:调用CCLayer::init()->>获取窗口的大小->>创建纹理->>得到纹理的大小->>通过纹理创建精灵帧->>通过精灵帧创建精灵帧缓存->>通过精灵帧缓存创建精灵->>将精灵添加到场景中->>获取窗口的大小->>设置精灵在场景中显示的位置
程序代码:
//先调用父类的init函数
CCLayer::init();
//获取窗口的大小
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
//创建纹理
CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage("aaaa.png");
//得到精灵的大小
CCSize size = texture->getContentSize();
//创建精灵帧
CCSpriteFrame* frame = CCSpriteFrame::createWithTexture(texture, CCRectMake(size.width/4,size.height/4, size.width/2, size.height/2));
//创建精灵帧缓存
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFrame(frame, "aaaa.png");
//创建精灵
CCSprite* sprite = CCSprite::createWithSpriteFrameName("aaaa.png");
//设置精灵的位置
sprite->setPosition(CCPoint(winSize.width / 2, winSize.height / 2));
//将精灵添加到场景中
addChild(sprite);
//设置显示精灵的位置(设置成精灵在场景的中间显示)
sprite->setPosition(CCPoint(winSize.width / 2, winSize.height / 2));
return true;
将代码放到Sprite.cpp下的bool Sprite::init()中编译运行:程序的执行结果如下