Cocos2d-x学习笔记 001--初识cocos

    今年大三下半年,刚开始老师说要学习unity但是不知道为什么改为学习Cocos2dx。  这样我在寒假学的unity就不能在女生面前装逼了,很伤心。但是既来之则安之,好好学习cocos吧。

    到目前为止,也是没有太过深入的理解过Cocos2dx【学习了差不多两个星期吧】。我感觉看别人对一个东西的理解总是不如自己去理解一下。最近在看关东生著的《Cocosdx实战c++》----其实感觉是有关cocos2dx的资料很少找了好久,最后选定这个作为自己的第一本Cocosdx启蒙书。

    刚开始就是直接没有实战,就是过了一遍《cocos实战》--感觉这一遍的浏览是很有价值的,毕竟对自己将要着手的项目能够实现些什么东西、能够怎样的实现有了一个大体的框架。好吧,开始上自己最近学习的干货。

------------------------------------------------------------------------------------------------------------------------------------------------------------------

刚开始实现的是cocos2dx的一个TiledMap地图的加载,以及tiledmap数据的读取。

1.使用TiledMap--这个可以参考http://shahdza.blog.51cto.com/2410787/1613527

    聊聊自己对Tiled Map的理解吧,首先TIledMap一个很实用的地图编辑软件--直接在官网上就能够下载,其次就是操作简单【虽然现在的喔连地形具体有什么作用都不知道】。具体一点的理解:创建一个新文件-》添加图块【图块就是自己的素材,会按照你规定的大小进行分割】-》命名图层【如果是初学者对层的概念不太了解,会有点难理解。那就干脆想,直接简单的创建两个图层--一个背景,一个对象层<在这里是没有考虑碰撞的东西>,在背景层里面绘制大体的场景,在对象层理添加一些对象<这个对象具体的我也不是很理解>】-》用自己的素材搭建好自己想要的场景后,保存【在这里需要注意的是有可能在你用cocos引用的时候发现一片黑--遇到这个问题第一个想到的就是打开自己保存的tmx文件--用记事本打开,打开后修改一下source的值为当前文件路径,然后就美滋滋了】。

2.在Cocos2dx里面打开tmx文件,显示场景。

这个只需要三步:1->在HelloWorld的头文件里面,申明一个TMXTiledMap 指针变量_tiledMap

                       2->在HelloWorld的cpp文件的init()里面给_tiledMap赋值【_tiledMap=TMXTiledMap::create("sourcename.tmx")】

                       3->像其他普通的元素一样addChild(_tiledMap)   ,然后就好了。easy。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

                                                         在tiledMap里面对对象进行碰撞检测。

碰撞检测,就需要再给你的tmx文件重新建一个层--collidable,在这个层里面绘制碰撞检测的区域,完成后就开始代码编辑。-----

整理下碰撞检测的思路----首先你需要在TiledMap的tmx文件中添加一个碰撞检测层->然后给这个层做一下标记【设置该层的图块属性(属性名+属性值)在这里我还把碰撞层也设置了同样的属性】->准备工作确认完成后就想着怎么在Cocos里面获取到这些碰撞块-------判断触摸移动的代码在onTouchEnded()里面编写,剩下的就是碰撞检测代码的编写。

1.申明一个函数void  setPlayerPos(Vec2 position)

函数实现的基本内容:

Vec2 tiledCoord=this->tileCoordFromPosition(position)   ;//这个函数需要自己添加进去---用来把Cocos的坐标点转换到瓦片坐标

    int  tiledGid=_collidable->getTileIDAt(tileCoord);              //_collidable是在init()函数中就初始化赋值指向collidable层

  接下来就是判断tiledGid的值【大于0说明这个位置有东西,等于0则为空不用判断】

  ---->>>既然这个坐标有碰撞物体,我们又在TiledMap里面给该层的所有图块进行了赋值操作,剩下的就是取出该块的值并作判断

   Value prop=_tiledMap->getPropertiesForGID(tiledGid) ;             //获取对应GID下的变量

   ValueMap propValueMap=prop.asValueMap();                              //把prop转换为ValueMap后就能够用键值对的方式获取了 比较方便

   std::string collidable=propValueMap["collidable"].asBool();         //后面赋值的格式就是键值对获取数据的格式

   到这里基本上就算是全部完成了碰撞检测的东西

--------------细心的人肯定会问那个坐标转换的代码怎么实现的

tileCoordFromPosition(Vec2 position){
    int x = position.x / _tiledMap->getTileSize().width;                     //这个很好理解
    int y = (_tiledMap->getMapSize().height*_tiledMap->getTileSize().height - position.y) / _tiledMap->getTileSize().height;   //这个有点懵逼
    return Vec2(x, y);
}

-----------------------------------到这里准备工作全部做完了,剩下的就是在正确的位置调用正确的函数就好了。

还记得前面提到过的onTOUchEnded()函数里面添加player的移动坐标修改的判定代码?【简单的说就是点击屏幕后判断player下一次将要移动的位置playerNextMovePos】

接下来只需要把这个将要移动的位置参数传到setPlayerPosition(playerNextMovePos),然后运行程序。

bingo。-------------------bingo----------------------

 

  

 

  

 

 

 

                      

 

 

 

 

 

 

   

 

转载于:https://www.cnblogs.com/dreammaker-K/p/6592166.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值