cocos2d-x 单点触摸事件使用

前端之家收集整理的这篇文章主要介绍了cocos2d-x 单点触摸事件使用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_0@
  • 场景类头文件

  • #ifndef__USE_SPRIT_SCENE_H__
    #define__USE_SPRIT_SCENE_H__
    #include"cocos2d.h"
    
    typedefenum
    {
    	Box_a=102,Box_b,Box_c
    }SpriteTags;
    
    
    
    classUseSprit:publiccocos2d::Layer
    {
    public:
    	staticcocos2d::Scene*createScene();
    	//there'sno'id'incpp,sowerecommendreturningtheclassinstancepointer
    
    	//Here'sadifference.Method'init'incocos2d-xreturnsbool,insteadofreturning'id'incocos2d-iphone
    	virtualboolinit();
    
    	//
    	virtualvoidonEnter();
    
    	//
    	virtualvoidonExit();
    
    	booltouchBegan(cocos2d::Touch*touch,cocos2d::Event*event);
    
    	voidtouchMoved(cocos2d::Touch*touch,cocos2d::Event*event);
    
    	voidtouchEnded(cocos2d::Touch*touch,cocos2d::Event*event);
    
    	//implementthe"staticcreate()"methodmanually
    	CREATE_FUNC(UseSprit);
    
    };
    
    #endif

    说明:1.单点触摸事件分为三段:开始拖动(touchBegan)、拖移(touchMoved)、释放拖动(touchEnded);

    2.它们拥有共同参数:cocos2d::Touch* touch,cocos2d::Event *event;

    3.onEnter 初始化的时候调用,即 刚要显示当前场景的时候(场景进入的时候调用);

    4.onExit 场景退出的时候调用

    @H_403_0@
  • 场景类源文件

  • #include"UseSpritScene.h"
    
    USING_NS_CC;
    
    Scene*UseSprit::createScene()
    {
    	//'scene'isanautoreleaSEObject
    	autoscene=Scene::create();
    
    	//'layer'isanautoreleaSEObject
    	autolayer=UseSprit::create();
    
    	//addlayerasachildtoscene
    	scene->addChild(layer);
    
    	//returnthescene
    	returnscene;
    }
    
    //on"init"youneedtoinitializeyourinstance
    boolUseSprit::init()
    {
    	//////////////////////////////
    	//1.superinitfirst
    	if(!Layer::init())
    	{
    		returnfalse;
    	}
    
    	SizevisibleSize=Director::getInstance()->getVisibleSize();
    	Vec2origin=Director::getInstance()->getVisibleOrigin();
    
    	//
    	autobg=Sprite::create("bg.png",Rect(0,visibleSize.width,visibleSize.height));
    	Texture2D::TexParamstp={GL_LINEAR,GL_LINEAR,GL_REPEAT,GL_REPEAT};
    	bg->getTexture()->setTexParameters(tp);
    	bg->setPosition(origin+Vec2(visibleSize.width/2,visibleSize.height/2));
    	addChild(bg,0);
    
    	Sprite*BoxA=Sprite::create("ygq.png");
    	BoxA->setPosition(origin+Vec2(visibleSize.width/2,visibleSize.height/2)+Vec2(-120,120));
    	addChild(BoxA,10,Box_a);
    	
    	Sprite*BoxB=Sprite::create("yg.png");
    	BoxB->setPosition(origin+Vec2(visibleSize.width/2,visibleSize.height/2));
    	addChild(BoxB,20,Box_b);
    
    	Sprite*BoxC=Sprite::create("ygq.png");
    	BoxC->setPosition(origin+Vec2(visibleSize.width/2,visibleSize.height/2)+Vec2(120,160));
    	addChild(BoxC,30,Box_c);
    
    
    	returntrue;
    }
    
    voidUseSprit::onEnter()
    {
    	Layer::onEnter();
    	log("UseSpritonEnter");
    
    	autolistener=EventListenerTouchOneByOne::create();
    
    	listener->setSwallowTouches(true);
    	listener->onTouchBegan=CC_CALLBACK_2(UseSprit::touchBegan,this);
    	listener->onTouchMoved=CC_CALLBACK_2(UseSprit::touchMoved,this);
    	listener->onTouchEnded=CC_CALLBACK_2(UseSprit::touchEnded,this);
    
    	EventDispatcher*eventDispatcher=Director::getInstance()->getEventDispatcher();
    
    	eventDispatcher->addEventListenerWithSceneGraPHPriority(listener,getChildByTag(Box_a));
    	eventDispatcher->addEventListenerWithSceneGraPHPriority(listener->clone(),getChildByTag(Box_b));
    	eventDispatcher->addEventListenerWithSceneGraPHPriority(listener->clone(),getChildByTag(Box_c));
    
    }
    
    
    boolUseSprit::touchBegan(Touch*touch,Event*event)
    {
    	autotarget=static_cast<Sprite*>(event->getCurrentTarget());
    
    	Vec2locationInNode=target->convertToNodeSpace(touch->getLocation());
    
    	Sizes=target->getContentSize();
    
    	Rectrect=Rect(0,s.width,s.height);
    
    	if(rect.containsPoint(locationInNode))
    	{
    
    
    
    		target->runAction(ScaleBy::create(0.06f,1.06f));
    		returntrue;
    
    
    	}
    
    
    	returnfalse;
    
    }
    
    voidUseSprit::touchMoved(Touch*touch,Event*event)
    {
    	autotarget=static_cast<Sprite*>(event->getCurrentTarget());
    	target->setPosition(target->getPosition()+touch->getDelta());
    
    }
    
    
    voidUseSprit::touchEnded(Touch*touch,Event*event)
    {
    	autotarget=static_cast<Sprite*>(event->getCurrentTarget());
    
    
    	Vec2locationInNode=target->convertToNodeSpace(touch->getLocation());
    
    	Sizes=target->getContentSize();
    
    	Rectrect=Rect(0,1.0f));
    
    
    	}
    
    }
    
    voidUseSprit::onExit()
    {
    	Layer::onExit();
    	Director::getInstance()->getEventDispatcher()->removeAllEventListeners();
    }

    猜你在找的Cocos2d-x相关文章