cocos2d-x 和cocos2d 中CCRectContainsPoint的不同
的有关信息介绍如下:在游戏制作中往往会用到TouchMoveEvent,在cocos2dx中有如下三个方法:virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);早这几个方法中我们会获得点击的点:touchMove = pTouch->getLocation();moveLayerPos = moveLayer->getPosition();然后判断点的位置是否存在我们需要的精灵:if (CCRectContainsPoint(nodePos,spCover->boundingBox())){ XXXXX //如果存在。。我们需要做的事情}最近在做cocos项目的时候发现cocos2d-x 和cocos2d 中CCRectContainsPoint实现是不同的,主要体现在边界的问题上,这都是一些小细节,如果不是很认真的话,这种错误越到最后往往越难以发现。首先我们看看cocos2d-x是如何实现CCRectContainsPointbool CCRect::CCRectContainsPoint(const CCRect& rect, const CCPoint& point){return rect.containsPoint(point);}继续往下看:bool CCRect::containsPoint(const CCPoint& point) const{bool bRet = false;if (point.x >= getMinX() && point.x <= getMaxX()//注意这里的等号&& point.y >= getMinY() && point.y <= getMaxY())//注意这里的等号{bRet = true;}return bRet;}也就是说这里的范围的上限和下线全部在计算范围之内,按理说这是不应该的,因为如果这样计算和可能会出现重叠的地方(边界)。cocos2d就很好的避免了这个重叠:CG_EXTERN bool CGRectContainsPoint(CGRect rect, CGPoint point)虽然看不到具体实现,但我测试结果是范围不包括上临界值。为了避免重叠出现,于是我重写了一个方法:就是把边界值去掉bool LevelScene::CCRectContainsPoint(const CCPoint& point,const CCRect& rect){bool bRet = false;if (point.x >= rect.origin.x && point.x < (rect.size.width+rect.origin.x)&& point.y >= rect.origin.y && point.y < (rect.size.height+rect.origin.y)){bRet = true;}return bRet;}