超级玛丽碰撞检测(跑酷碰撞检测)
来源:互联网 发布:DB2000数据库 2008 编辑:程序博客网 时间:2024/05/16 15:04
/*检测是否碰撞*/ if(CCRectMake(X-mario->getPathLenght()+1,Y,Widht-2,Height).intersectsRect(mario->getPlayerBoundingBox())) {/*上面的函数是检测到已经碰撞后, 下面的逻辑是判断碰撞后人物与物体的位置关系*//*物体位置和长宽*/float x2 = X-mario->getPathLenght();float y2 = Y;int h2 = Height;int w2 = Widht;/*人物位置和长宽*/int y1 = mario->getPositionY();int x1 = mario->getPositionX();float w1 = mario->getCurrentWidth();float h1 = mario->getCurrentHeight();/*如果y坐标不重叠 , y坐标就减去人物y轴的速度*/if (abs(y1+h1-y2)>1e-4){y1-=mario->verticalVelocity;}/* 25------------ 6| || |1| | 3| |------------ 8 4 7上面数字是物体的方位人物从哪个方位碰撞到物体*/if ((y1>=y2)&&(y1+h1<y2+h2)){if (x1<x2)//1{/*正面碰撞1设置x位置设置水平速度*/mario->setPositionX(x2-w1);mario->horizontalVelocity = 0;} else//3{/*正面碰撞3设置x位置设置水平速度*/mario->setPositionX(x2+w2);mario->horizontalVelocity = 0;}}else if ((x1>=x2)&&(x1+w1<x2+w2)){if (y1>y2)//2{/*正面碰撞2设置y位置设置垂直速度*/mario->setPositionY(y2+h2);if (mario->getIsJumping()){mario->setIsJumping(false);}mario->setIsOnTheObject(true);} else//4{/*正面碰撞4设置y位置设置垂直速度*/mario->setPositionY(y2-h1);mario->verticalVelocity = -mario->verticalVelocity;}}else if(x1<=x2&&y1>y2)//5{/*碰撞面5 (同时碰撞 面1 和 面2 )*/if (x1+w1-x2>y2+h2-y1){/*如果碰撞到的2比1多设置y坐标设置垂直速度*/mario->setPositionY(y2+h2);if (mario->getIsJumping()){mario->setIsJumping(false);}mario->setIsOnTheObject(true);}else{/*如果碰撞到的2比1少设置x坐标设置水平速度*/mario->setPositionX(x2-w1);mario->horizontalVelocity = 0;}}else if (x1>=x2&&y1>y2)//6{/*同理。。。。。。*/if (x2+w2-x1>y2+h2-y1){mario->setPositionY(y2+h2);if (mario->getIsJumping()){mario->setIsJumping(false);}mario->setIsOnTheObject(true);} else{mario->setPositionX(x2+w2);mario->horizontalVelocity = 0;}}else if(x1>=x2&&y1<y2)//7{if (x2+w2-x1>y1+h1-y2){mario->setPositionY(y2-h1);mario->verticalVelocity = -mario->verticalVelocity;mario->setPositionY(mario->getPositionY()+mario->verticalVelocity);} else{mario->setPositionX(x2+w2);mario->horizontalVelocity = 0;}}else if (x1<=x2&&y1<y2)//8{if (x1+w1-x2>y1+h1-y2){mario->verticalVelocity = -mario->verticalVelocity;mario->setPositionY(y2-h1);mario->setPositionY(mario->getPositionY()+mario->verticalVelocity);} else{mario->setPositionX(x2-w1);mario->horizontalVelocity = 0;}} }
0 0
- 超级玛丽碰撞检测(跑酷碰撞检测)
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- 碰撞检测
- HDU1166 敌兵布阵(线段树)
- android进程间通信--消息机制及IPC机制实现
- 页面布局
- struts2.X心得7--接收请求参数和struts类型转换介绍以及案例分析
- Moodle平台问题集锦
- 超级玛丽碰撞检测(跑酷碰撞检测)
- 《Mastering Opencv ...读书笔记系列》车牌识别(II)
- mogodb操作
- STL--5类迭代器
- Netbeans IDE 项目里显示的中文为乱码 解决方法
- DisplayObject等显示对象基类
- socket编程 - Asyncsocket(详解版)
- Html5 学习系列(四)文件操作API
- UVa 10465 - Homer Simpson