关于cocosdx加载tmx地图和一些碰撞检测的问题

这篇文章将的是关于一些加载tmx地图和实现精灵与金币的碰撞检测的问题。

写这篇文章之前看了很多文章,是、但是个人感觉都说的不明了,所以我做出来之后就在微博上来与大家分享一个明了的方法,希望能对新手有所帮助。

首先我们需要一张地图,这张地图有一些属性:

大家都看见这张地图了,上面有地面和一些金币,我们主要关注的是金币,里面有金币和金圈还有五角星。

下面我们分别看看他们的属性:

五角星:


圆圈:


金币:



我们看见他们有一个共同的属性:jewelType

下面我们直接上代码:

       //加载地图
map=CCTMXTiledMap::create("3.tmx");
//获取金币层
layer=map->layerNamed("jewel");


       //将点击的点转化为tilemap地图上的网格坐标
       CCPoint HelloWorld::covertPointToTiledCoord(CCPoint p)  
{  
int x = p.x / map->getTileSize().width;  
int y = ((map->getMapSize().height * map->getTileSize().height) - p.y) / map->getTileSize().height;  
CCLOG("%d   %d",x,y);
return ccp(x, y);  
}


    //touch函数,注释很详细就不解释了

bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{


//获取点击坐标
touchPoint=pTouch->getLocationInView();
//将点击坐标转化为GL坐标
touchPoint=CCDirector::sharedDirector()->convertToGL(touchPoint);
sprite->runAction(CCMoveTo::create(1,ccp(touchPoint.x,touchPoint.y)));


//调用covertPointToTiledCoord函数将点击点转化为tmxmap的坐标格坐标
tmxPoint=covertPointToTiledCoord(touchPoint);
//指定坐标获取GID
unsigned int m_gid = layer->tileGIDAt( tmxPoint); 
//根据GID,获得属性字典
CCDictionary *pKey=map->propertiesForGID(m_gid);
/* 取得格子的jewelType属性值 */  
//int型
 int jewelType = pKey->valueForKey("jewelType")->intValue();
 //字符型
// const CCString* prop = pKey->valueForKey("jewelType"); 
return true;
}




  //我们在update函数里面检测sprite精灵是否包含金币所在的点,是的话就removeTileAt掉

void HelloWorld::update(float delta)
{
CCRect spRect=sprite->boundingBox();
if (spRect.containsPoint(touchPoint))
{
//移除指定位置砖块对象
layer->removeTileAt(tmxPoint);
}
}

这里我们的代码就完了,由于只贴了cpp里面的代码,没有的大家可以在.h文件里面自己定义。

这里我们做的功能是:

1.加载一张tmx地图

2.获取地图里面相应的金币,圆圈和五角星的金币里面的位置

3.我们将touch里面的函数转换为map地图里面的格子坐标

4.我们点击屏幕时让精灵移动到屏幕点击的点

5.判断精灵的Rect是否包含了金币的坐标,包含了就一处金币,达到了一个吃金币的效果




本文章大到此结束,大家轻喷,,,,,,,小毅

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值