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

原创 2015年07月09日 17:16:32

这篇文章将的是关于一些加载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是否包含了金币的坐标,包含了就一处金币,达到了一个吃金币的效果




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

相关文章推荐

cocos2d-x中讲解TileMap地图编辑器的高级用法(一)

有段时间没更新博客了,最近一直忙项目,下面就把我最近的新成果给大家分享一下。 近段时间主要是在研究开发工具与游戏制作的结合,大家知道工欲善其事必先利其器,一款好的方便的开发工具能够极大的提高游戏...

Tiled地图编辑器 Tiled Map Editor 的使用(一)基础功能+地形功能

MapEditor 为了快速开发游戏,这个工具为开发者提供了一种快捷的解决方法 -- 地图编辑器。 存储方式为 TMX文件+图片素材PNG(支持透明格式的图片) 已知适用语言 Flash(Acti...
  • firseve
  • firseve
  • 2016年03月03日 16:28
  • 3448

[译]在Tiled Map中使用碰撞检测(二) TMX地图中的碰撞检测

On 2010年06月20日, in iPhone, by 毛叔 在上一篇里,我们已经学会了如何创建一个基于tiled map的简单游戏。学会了如何制作地图,如何将地图载入到游戏,如何让主角在屏...

[译]在Tiled Map中使用碰撞检测(二) TMX地图中的碰撞检测

On 2010年06月20日, in iPhone, by 毛叔 在上一篇里,我们已经学会了如何创建一个基于tiled map的简单游戏。学会了如何制作地图,如何将地图载入到游戏,如何让主角在屏...

TMX瓦片地图无法加载问题

cocos2d-x编程会用到瓦片地图,今天用Tiled生成了一幅TMX瓦片地图,可以在加载代码时出现程序崩溃问题。 网上有人说要改一下设置,修改如下:   编辑>参数>通用>另存为数据层>Base...

碰撞检测问题概述

  • 2013年06月08日 20:52
  • 123KB
  • 下载

Cocos2D-x游戏开发之十九:瓦块地图之碰撞检测

昨天我们有了精灵和背景,并且精灵可以跑动了,但是我们不能让精灵无穷无尽地跑下去吧,于是今天我们要在地图上添加一些障碍物了; 首先打开精灵的TMX地图,然后我们自定义一个32X32像素的图片添加到图层中...

Cocos2d-x Tiled地图编辑器(二)精灵走动起来、碰撞检测

图: 程序代码: 头文件声明函数及变量 void registerWithTouchDispatcher(void); bool ccTouchBegan(CCTouch *pTouch,...

<cocos2d-x for wp7>使用cocos2d-x制作基于Tile地图的游戏:碰撞检测和收集物品(二)

本教程基于子龙山人翻译的cocos2d的IPHONE教程,用cocos2d-x for XNA引擎重写,加上我一些加工制作。教程中大多数文字图片都是原作者和翻译作者子龙山人,还有不少是我自己的理解和加...

11. 碰撞检测和收集物品:如何使用cocos2d制作基于tiled地图的游戏:第二部分

免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于cocosdx加载tmx地图和一些碰撞检测的问题
举报原因:
原因补充:

(最多只允许输入30个字)