且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

cocos2d-x学习笔记番外篇03:坑爹的矩形碰撞

更新时间:2022-10-04 15:09:39

 在写炸弹人那个例子时,发现了一个问题,按道理说,主角已经躲开了炸弹爆炸区域,但仍然给炸死了。如图:

cocos2d-x学习笔记番外篇03:坑爹的矩形碰撞

我们找到计算矩形相交的代码


  1. bool CCRect::CCRectIntersectsRect(const CCRect& rectA, const CCRect& rectB) 
  2.     return !(CCRectGetMaxX(rectA) < CCRectGetMinX(rectB)|| 
  3.             CCRectGetMaxX(rectB) < CCRectGetMinX(rectA)|| 
  4.             CCRectGetMaxY(rectA) < CCRectGetMinY(rectB)|| 
  5.             CCRectGetMaxY(rectB) < CCRectGetMinY(rectA)); 

然后我们随便打开一个函数


  1. CGFloat CCRect::CCRectGetMaxX(const CCRect& rect) 
  2.     return rect.origin.x + rect.size.width; 

问题找到了,比如,我声明一个x=0,y=0,w=10,h=10的矩形

那么他的四个极限位置应该是

minX=x

minY=y

maxX=x+w-1

maxY=y+h-1

但是他这里没有-1。所以造成最后结果大了一个点。这个问题,大家尤其要注意。所以在声明的时候,要自己-1,比如上面的矩形就要声明为:

0,0,9,9






 本文转自 老G 51CTO博客,原文链接:http://blog.51cto.com/goldlion/762103,如需转载请自行联系原作者