cocos2d-x初学笔记06:触屏事件TouchEvent

        在cocos2d-x中触屏事件有四种,即:

        //触屏开始事件

         virtual voidccTouchesBegan (CCSet *pTouches, CCEvent *pEvent)
       //触屏移动事件
         virtual void ccTouchesMoved (CCSet *pTouches, CCEvent *pEvent)
        //触屏结束事件
         virtual void ccTouchesEnded (CCSet *pTouches, CCEvent *pEvent)
         //触屏取消事件
         virtual void ccTouchesCancelled (CCSet *pTouches, CCEvent *pEvent)

        我们这一篇文章实现点击屏幕后在点击的位置显示一张图片,新建一个项目并命名为“TouchEventTest”。图片资源还是使用TestCpp项目自带的资源,我的目录为D:\cocos2d-2.0-x-2.0.4\samples\TestCpp\Resources\Images(你的目录有可能不一样)找到ball.png复制到我们自己的项目中的Resources文件夹,然后在VS中右击项目选择添加->现有项,添加刚刚复制的图片到我们的项目SpriteTest即可。

           (注意:我使用的cocos2d-x版本是2.0.4,系统是win7)下载地址

首先在HelloWorld.h文件中使用cocos2d的命名空间,即加入”using namespace cocos2d;“这句话。

然后在HelloWorld布景类中声明这四个函数,修改后的HelloWorld布景类代码如下

class HelloWorld : public cocos2d::CCLayer
{
public:
    // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone
    virtual bool init();  

    // there's no 'id' in cpp, so we recommand to return the exactly class pointer
    static cocos2d::CCScene* scene();
    
    // a selector callback
    void menuCloseCallback(CCObject* pSender);

    //触屏开始事件
    virtual void ccTouchesBegan (CCSet *pTouches, CCEvent *pEvent);
    //触屏移动事件
    virtual void ccTouchesMoved (CCSet *pTouches, CCEvent *pEvent);
    //触屏结束事件
    virtual void ccTouchesEnded (CCSet *pTouches, CCEvent *pEvent);
    //触屏取消事件
    virtual void ccTouchesCancelled (CCSet *pTouches, CCEvent *pEvent);

    // implement the "static node()" method manually
    CREATE_FUNC(HelloWorld);
};

打开HelloWorld.cpp文件,我们修改init函数如下,即删除了背景图和显示文字,并且设置屏幕支持触摸

bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {
        //////////////////////////////////////////////////////////////////////////
        // super init first
        //////////////////////////////////////////////////////////////////////////

        CC_BREAK_IF(! CCLayer::init());

        //////////////////////////////////////////////////////////////////////////
        // add your codes below...
        //////////////////////////////////////////////////////////////////////////

        // 1. Add a menu item with "X" image, which is clicked to quit the program.

        // Create a "close" menu item with close icon, it's an auto release object.
        CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
            "CloseNormal.png",
            "CloseSelected.png",
            this,
            menu_selector(HelloWorld::menuCloseCallback));
        CC_BREAK_IF(! pCloseItem);

        // Place the menu item bottom-right conner.
        pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));

        // Create a menu with the "close" menu item, it's an auto release object.
        CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
        pMenu->setPosition(CCPointZero);
        CC_BREAK_IF(! pMenu);

        // Add the menu to HelloWorld layer as a child layer.
        this->addChild(pMenu, 1);

        //设置屏幕可以触摸
	this->setTouchEnabled(true);

        bRet = true;
    } while (0);

    return bRet;
}

然后在HelloWorld.cpp文件中实现我们声明的四个触摸函数,我们这里只对触摸结束函数进行了功能的实现,即触摸结束时在触摸点显示一张小球的图片,其他触摸事件不做处理,添加的四个函数如下

void HelloWorld::ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent)
{

}
void HelloWorld::ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent)
{

}
void HelloWorld::ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent)
{
	//我们用迭代器获得多点触摸的第一个触点
	CCSetIterator it=pTouches->begin();  
    CCTouch* touch=(CCTouch*)(* it);  

	//得到第一个触点的位置
	//(2.0之后不再需要对取得的位置进行坐标系的转换,即从屏幕坐标系转换GL坐标系)
	CCPoint location=touch->getLocation();

	//创建一个精灵,并将其显示在触摸点的位置
	CCSprite* sprite=CCSprite::create("ball.png");
	sprite->setPosition(ccp(location.x,location.y));
	this->addChild(sprite,1);
}
void HelloWorld::ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent)
{

}

运行程序,我们分别在屏幕的四个角点击一次,那么在每个角上都会出现一个小球,效果如下

                         cocos2d-x初学笔记06:触屏事件TouchEvent_第1张图片

最后祝愿每一个奋斗在路上的人早日实现梦想!奋斗

你可能感兴趣的:(cocos2d-x,cocos2d-x,TouchEvent,TouchEvent,TouchEvent,触屏事件)