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

声明函数碰撞检测函数,两个精灵和重写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

Cocos2d-x 精灵碰撞检测(方法一),布布扣,bubuko.com

时间: 2024-12-10 11:44:15

Cocos2d-x 精灵碰撞检测(方法一)的相关文章

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

将"Cocos2d-x 精灵碰撞检测(方法一)" update函数修改一下. 使用精灵boundingBox函数获取直接精灵边界框, 不用自己计算精灵矩形大小了,还比较精确,然后调用intersectsRect计算2个精灵矩形是否存在交集. 代码: void HelloWorld::update(float delta) { //返回精灵边界框 CCRect cr1 = sp1->boundingBox(); CCRect cr2 = sp2->boundingBox();

如何快速产生流量,流量精灵使用方法

1流量意义:流量就是浏览量,刷流量一方面可以增加自己的排名,另一方面当用户看到自己的宝贝浏览量很大的时候会觉得这个东西卖的很火,如果浏览量只有十几甚至几,则不会产生购买欲望. "累计流量","今日流量"是什么意思? 累计流量:表示您的网址历史累计共被访问的次数: 今日流量:表示您的网址今天被访问的次数: 特别说明:"累计流量"与"今日流量"是软件内部运行统计的数字,并不代表网站流量的绝对数字,但可作为一种趋势参考,网站实际访问

cocos2d中各种action方法的应用

Action示例: 1.移动动作 cc.MoveBy:create(time, posX, posY)  在time时间内,相对当前位置基础上移动x,y个单位. cc.MoveTo:create(time, posX, posY)  在time时间内,移动到cc.p(posX, posY)位置. 2.缩放动作 cc.ScaleBy:create(time, scaleX, scaleY) 在time时间内,相对当前大小缩放scale(scaleX, scaleY)个单位 cc.ScaleTo:c

Cocos2d 使用控制台打印的方法

1.打开当前项目的win32解决方案. 2.在解决方案管理器的win32文件夹下打开main.cpp 3.增加以下代码: #define USE_WIN32_CONSOLE //以下加到入口函数 #ifdef USE_WIN32_CONSOLE AllocConsole(); freopen("CONIN$", "r", stdin); freopen("CONOUT$", "w", stdout); freopen(&quo

冰点系统还原精灵使用方法

开启或解除还原使用方法: 键盘按住Shift不放 鼠标左键双击右下角任务栏的小熊图标 密码为 冻结=自动还原模式(第一项)(也可以理解为 影子模式或者保护模式) 解冻=解除还原模式(第三项) (也可以理解为正常模式或者没有保护模式) 第二项建议新手别使用. [注意]更改状态,点击“确定”后,重启电脑才生效. 原文地址:https://www.cnblogs.com/ygit123/p/12043914.html

经常会用到的碰撞检测方法

using UnityEngine; using System.Collections; public class PlayerTrigger : MonoBehaviour { void OnTriggerEnter(Collider other) { Debug.Log ("Enter"); } void OnTriggerStay(Collider other) { Debug.Log("Stay"); } void OnTriggerExit(Collide

cocos2d-html5 碰撞检测的几种方法

游戏中的碰撞还是比较多的,比如角色与角色的碰撞,角色与墙壁的碰撞,角色与怪物的碰撞等,都需要 进行碰撞的检测,来触发一定的事件 最近在尝试制作一个小游戏的时候需要用到碰撞检测,然后就查了下资料,并在论坛进行提问等算是找到了比较满意的碰撞检测方法,这里记录下来 现在自己知道的方法算是有了三种了,下面一一记录并分析下他们各自的优缺点 1.就是官方提供的,根据getBoundingBox();方法获取要检测的碰撞物体的范围,然后再根据rectIntersectsRect();方法进行判断需要检测的两个

cocos2d-x ios游戏开发初认识(八) 触摸事件与碰撞检测

玩过植物大战僵尸都知道,要在草坪里放一朵向日葵或者其它的植物只需触摸那个植物将其拖入到想要摆放的位置,这其实就是这节要写的触摸事件.还可以发现当我们的僵尸出来的时候,我们的小豌豆会发子弹攻击僵尸,当子弹与僵尸碰撞的时候子弹自动消失,这就这节要说的碰撞检测. 下面具体看代码的实现: 做ios开发有触摸事件cocos2d同样也有 一.先覆写touch事件 .h文件 using namespace cocos2d; class MainScene:public CCLayer { private: v

cocos2d学习笔记

//粒子系统,使用系统自己的粒子系统的书写方法 if(!CCLayer::init()) return false; CCTexture2D* fire=CCTextureCache::sharedTextureCache()->addImage("fire.png"); CCParticleSystem* firePartical = CCParticleFire::create(); firePartical->setTexture(fire); this->ad