场景类头文件:
#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 初始化的时候调用,即 刚要显示当前场景的时候(场景进入的时候调用);
场景类源文件:
#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(); }