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

 

 
  

场景中存在多个精灵,需要移动以安放在合适的位置,简单的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); 

}


 


 

你可能感兴趣的:(cocos2d-x)