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

你可能感兴趣的:(cocos2d-x,矩形碰撞)