接上一节,在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) { }
在触摸的时候,更新精灵的位置。