接上一节,在GameScene.h中声明:


#pragma once
#include "cocos2d.h"
     
USING_NS_CC;
     
class GameScene : public CCLayer
{
public:
    GameScene(void);
    ~GameScene(void);
     
    //重写init()方法
    virtual bool init();
                                                                                           
    //必须重写scene方法
    static CCScene* scene();
                                                                                           
    //相当于create函数,重写了CCLayer里的create函数
    CREATE_FUNC(GameScene);
       
    virtual void registerWithTouchDispatcher(void);
    virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
    virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);
    virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
    virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);
       
    //成员变量
    CCSprite* sprite;
};


并在GameScene.cpp的init()中设置:

this->setTouchEnabled(true);


然后在registerWithTouchDispatcher(void)函数中注册Touch事件:

CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, true);


完整代码如下:


#include "GameScene.h"
       
GameScene::GameScene(void){}
GameScene::~GameScene(void){}
       
CCScene* GameScene::scene()
{
    CCScene* scene =CCScene::create();
    GameScene* gameScene = GameScene::create();
    scene->addChild(gameScene);
       
    return scene;
}
       
bool GameScene::init()
{
    if(!CCLayer::init())
    {
        return false;
    }
       
    //获取屏幕大小
    CCSize size = CCDirector::sharedDirector()->getWinSize();
       
    //从图片创建一个精灵
    CCSprite* map = CCSprite::create("bg.png");
       
    //设置精灵在场景中的位置
    map->setPosition(ccp(size.width / 2, size.height / 2));
    //添加精娄到场景中
    this->addChild(map, 0);
       
    CCArray* spriteArray = CCArray::createWithCapacity(4);
       
    int i;
    for(i = 0; i < 4; i++)
    {
        //截取图片部分
        CCSpriteFrame* spriteFrame = CCSpriteFrame::create("lubi.png",
            CCRectMake(i * 80, 80 * 2, 80, 80));
        spriteArray->addObject(spriteFrame);
        //精精灵添加到场景中,默认第一帧图片
        if(i == 0){
            sprite = CCSprite::createWithSpriteFrame(spriteFrame);
            sprite->setPosition(ccp(size.width / 2 - sprite->getContentSize().width,
                size.height / 2 + sprite->getContentSize().height));
            this->addChild(sprite);
        }
                                                
    }
       
    //创建动画
    CCAnimation* spriteAnimation = CCAnimation::createWithSpriteFrames(spriteArray, 0.2f);
    sprite->runAction(CCRepeatForever::create(CCAnimate::create(spriteAnimation)));
    this->setTouchEnabled(true);
       
    return true;
}
       
void GameScene::registerWithTouchDispatcher(void)
{
    CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,0,true);
}
       
bool GameScene::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
    sprite->setPosition(ccp(pTouch->getLocation().x, pTouch->getLocation().y));
       
    return true;
}
       
void GameScene::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
{
}
       
void GameScene::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
{
}
       
void GameScene::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)
{
}


在触摸的时候,更新精灵的位置。


 Cocos2D-X笔记(3)Touch事件:移动精灵_触摸事件