关于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是否包含了金币的坐标,包含了就一处金币,达到了一个吃金币的效果




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

TMXMap解析

TMXMap.h #ifndef __CCTMX_TILE_MAP_H__ #define __CCTMX_TILE_MAP_H__ #include "CCNode.h" #include "...
  • sh6842
  • sh6842
  • 2014年08月07日 21:29
  • 2592

[转载] 在Tiled Map中使用碰撞检测

网上这篇教程的转载feic [转载] 在Tiled Map中使用碰撞检测 Posted on 2011-01-20 15:34 besterChen 阅读(9797) 评论(3...
  • korekara88730
  • korekara88730
  • 2014年11月17日 01:46
  • 5354

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

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

Tiled碰撞检测的实现

名词:meta 图元 tile 砖块 变量: CCTMXTiledMap* m_tiledMap; //地图 CCSprite* wangYijIe; //英雄王义杰 CCTMXLayer...
  • themagickeyjianan
  • themagickeyjianan
  • 2014年07月28日 11:55
  • 604

【cocos2dx】TMXTiledMap增加碰撞体

TMXTiledMap 增加碰撞体,可以添加任何所见到的物体上,本次文章是增加到object多边形上,TMXTiledMap必须存在object,代码如下TMXTiledMap * map = TMX...
  • kongfanqunqq
  • kongfanqunqq
  • 2017年04月13日 09:05
  • 419

cocos2dx之CCTMXTiledMap

CCTMXTiledMap: 瓦片上地图集类具有如下几个特性: 1,每个图素都是一个精灵 2,每个图素的精灵类在需要时调用tiltAt函数被创建 3.,每个图素都可以进行旋转缩放等设置 4,在运行时可...
  • ganpengjin1
  • ganpengjin1
  • 2013年12月24日 15:06
  • 8944

tiled-0.15.2-win64 TMX 地图安装包

  • 2016年03月13日 18:30
  • 15.4MB
  • 下载

跑酷类游戏------quick-Cocos2d-X lua添加瓦片地图、瓦片地图的移动以及碰撞检测

MainScene = class("MainScene", function()     return display.newScene("MainScene") end) funct...
  • u011269801
  • u011269801
  • 2014年11月03日 16:42
  • 2292

tmx瓦片地图文件内容的解析与地图自动生成

想在游戏中使用瓦片地图,但发现手动拼地图确实很麻烦,于是就想能不能自动生成地图。打开一个我编辑好的地图: 保存之后会是一个.tmx格式的文件,用文本编辑器打开这个文件,你会发现这个文件是一个xml文件...
  • fengmm521
  • fengmm521
  • 2017年11月04日 21:59
  • 162

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

这篇文章将的是关于一些加载tmx地图和实现精灵与金币的碰撞检测的问题。 写这篇文章之前看了很多文章,是、但是个人感觉都说的不明了,所以我做出来之后就在微博上来与大家分享一个明了的方法,希望能对新手有...
  • u014417405
  • u014417405
  • 2015年07月09日 17:16
  • 598
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于cocosdx加载tmx地图和一些碰撞检测的问题
举报原因:
原因补充:

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