您的位置:首页 > 移动开发 > Cocos引擎

Cocos2d-x 精灵碰撞检测(方法一)

2014-05-29 08:29 495 查看
声明函数碰撞检测函数,两个精灵和重写update

bool isCollision( CCPoint p1,CCPoint p2,int w1,int h1,int w2,int h2 );
	CCSprite *sp2;
	CCSprite *sp1;
	virtual void update(float delta);

	//重写触摸事件
	virtual void registerWithTouchDispatcher();
	virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);
	virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);
	virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);

cpp文件实现

初始2个精灵

sp1 = CCSprite::create("5.png");
	sp1->setScale(0.3);
	sp1->setPosition(ccp(100, visibleSize.height/2));
	this->addChild(sp1);

	sp2 = CCSprite::create("6.png");
	sp2->setScale(0.3);
	sp2->setPosition(ccp(300, visibleSize.height/2));
	this->addChild(sp2);

开启触摸及定时器

setTouchEnabled(true);
	scheduleUpdate();

触摸移动精灵sp2与精灵sp1发生碰撞

bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
	return true;
}
void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
{
	;
}
//移动精灵
void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
{
	CCSize winSize = CCDirector::sharedDirector()->getVisibleSize();  
	if (sp2) {  
		CCPoint pos = pTouch->getDelta();
		CCPoint currentPos = sp2->getPosition();
		currentPos = ccpAdd(currentPos, pos);  
		currentPos = ccpClamp(currentPos, CCPointZero, ccp(winSize.width, winSize.height));//限制精灵出屏幕  
		sp2->setPosition(currentPos);//移动重设精灵坐标
	} 
}
void HelloWorld::registerWithTouchDispatcher()
{
	CCDirector* pDirector = CCDirector::sharedDirector();  
	pDirector->getTouchDispatcher()->addTargetedDelegate(this, 0, true);  

}

update函数检测碰撞,isCollision参数顺序:精灵1的坐标,精灵2的坐标,精灵1的宽,高, 精灵2的宽,高

bool HelloWorld::isCollision( CCPoint p1,CCPoint p2,int w1,int h1,int w2,int h2 )
{
	if(abs(p1.x - p2.x) < w1 + w2 && abs(p1.y - p2.y) < h1 + h2)
	{
		return true;
	}
	return false;
}
void HelloWorld::update(float delta)
{
	if (isCollision(sp1->getPosition(),sp2->getPosition(), 45, 28.3	, 47.5, 35))
	{
		CCLOG("--------Is Collision, sp2.x: %f, sp2.y: %f", sp2->getPositionX(), sp2->getPositionY());
	}
	else
		CCLOG("++++++++ Is't Collision, sp2.x: %f, sp2.y: %f", sp2->getPositionX(), sp2->getPositionY());
}


源码下载地址:http://download.csdn.net/detail/oyangyufu/7415923
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: