在写炸弹人那个例子时,发现了一个问题,按道理说,主角已经躲开了炸弹爆炸区域,但仍然给炸死了。如图:
我们找到计算矩形相交的代码
- bool CCRect::CCRectIntersectsRect(const CCRect& rectA, const CCRect& rectB)
- {
- return !(CCRectGetMaxX(rectA) < CCRectGetMinX(rectB)||
- CCRectGetMaxX(rectB) < CCRectGetMinX(rectA)||
- CCRectGetMaxY(rectA) < CCRectGetMinY(rectB)||
- CCRectGetMaxY(rectB) < CCRectGetMinY(rectA));
- }
然后我们随便打开一个函数
- CGFloat CCRect::CCRectGetMaxX(const CCRect& rect)
- {
- 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,如需转载请自行联系原作者