首页 > 代码库 > 创建精灵

创建精灵

精灵: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()中编译运行:程序的执行结果如下



创建精灵