场景类头文件:
#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 场景退出的时候调用;
场景类源文件:
#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();
}