学习笔记之cocos2d-x2.1.1实现多个精灵的拖动

来源:互联网 发布:淘宝卖的奶粉是真的吗 编辑:程序博客网 时间:2024/05/20 02:56

场景中存在多个精灵,需要移动以安放在合适的位置,简单的move会出现精灵区域重叠的情况,稍微在ccTouchBegan函数中做修改就可以解决这个问题,每次移动当前ccTouchBegan点击下的那个精灵。需要开启ccTouchBegan和ccTouchMoved的代理,不然单单的setTouchEnabled(true);是没有效果的,还是直接看代码吧

bool HelloWorld::init(){bool bRet = false;do {CC_BREAK_IF(! CCLayer::init());CCMenuItemImage *pCloseItem = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,menu_selector(HelloWorld::menuCloseCallback));CC_BREAK_IF(! pCloseItem);pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 500));CCMenuItemImage *pSaveItem = CCMenuItemImage::create("save_1.png","save_2.png",this,menu_selector(HelloWorld::menuSaveCallback));CC_BREAK_IF(! pSaveItem);pSaveItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 100, 100));CCMenu* pMenu = CCMenu::create(pCloseItem,pSaveItem, NULL);pMenu->setPosition(CCPointZero);CC_BREAK_IF(! pMenu);this->addChild(pMenu, 1);CCSize s = CCDirector::sharedDirector()->getWinSize();CCSprite* bg = CCSprite::create("bg.png");CC_BREAK_IF(!bg);bg->setPosition(ccp(s.width/2,s.height/2));this->addChild(bg);//////////////////////////////////////////////////////////////////////////TagCount = 0;CCSprite* sprite=CCSprite::create("1.png"); CC_BREAK_IF(!sprite); sprite->setPosition(ccp(100,200));this->addChild(sprite,1,++TagCount); CCSprite* sprite2=CCSprite::create("2.png"); CC_BREAK_IF(!sprite2); sprite2->setPosition(ccp(500,200));this->addChild(sprite2,2,++TagCount); CCDirector* pDirector = CCDirector::sharedDirector();pDirector->getTouchDispatcher()->addTargetedDelegate(this, 0, true);setTouchEnabled(true);bRet = true;} while (0);return bRet;}bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { int tag ;for (tag = 1;tag<=TagCount;tag++){CCSprite* sprite= (CCSprite*)this->getChildByTag(tag); CCPoint touchPoint = pTouch->getLocationInView();touchPoint = CCDirector::sharedDirector()->convertToGL( touchPoint );CCRect rc1 = sprite->boundingBox();if (rc1.containsPoint(touchPoint)){ pSprite = sprite;return true;}}return false; } void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent) {CCPoint beginPoint=pTouch->getLocationInView(); beginPoint=CCDirector::sharedDirector()->convertToGL(beginPoint); CCPoint endPoint=pTouch->getPreviousLocationInView(); endPoint=CCDirector::sharedDirector()->convertToGL(endPoint); CCPoint offSet =ccpSub(beginPoint,endPoint); CCPoint toPoint=ccpAdd(pSprite->getPosition(),offSet); pSprite->setPosition(toPoint); }



原创粉丝点击