您的位置:首页 > 移动开发 > Cocos引擎

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

2013-09-27 22:04 260 查看
接上一节,在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)
{
}


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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐