cocos2d-x游戏实例(25)-简易动作游戏(3)

来源:互联网 发布:二次元网址导航源码 编辑:程序博客网 时间:2024/05/14 16:05

小满(bill man)个人原创,欢迎转载,转载请注明地址,小满(bill man)的专栏地址http://blog.csdn.net/bill_man

本篇进行垂直方向上的碰撞检测,测试的方法就是把主角的初始高度设高,让主角落至地面:


来看判断垂直方向的碰撞的函数playermapvcollision:


前面几句是获得主角的位置和宽高以及获得地图,然后通过如下几句获得主角在地图上的索引横纵坐标并进一步获得主角所在图素块的tilegid :

indexx = (playerpoint.x) / map->getTileSize().width;

indexy = map->getMapSize().height - (playerpoint.y) / map->getTileSize().height;

CCPoint playerindex = ccp(indexx,indexy);

int tilegid = layer->tileGIDAt(playerindex);

当获得纵坐标的时候需要注意的是纵坐标除以图素高并不能直接获得在地图中的图素纵坐标索引,因为地图的索引是从左上角开始的,而坐标是从左下角开始,所以需要转换一下,用整个地图的纵坐标格数map->getMapSize().height减去我们纵坐标除以图素高的值便是主角所在位置的纵坐标索引值。接下来获得之前定义的“collion”值,如果“collion”值为1,那么停掉主角在纵坐标运动的标志vmove,否则vmove会被设置为1,也就是让主角一直延纵坐标移动。


然后在update中调用playermapvcollision,然后在处理纵坐标的位移,这里只是简单的让主角作匀速直线运动

如有错误之处,希望大家多多指正

下一篇继续简易动作游戏实例