Cocos2d-x 3.x getContentSize、getBoundingBox区别,灵活运用于碰撞检测

在很多碰撞检测中经常可以看到它,getContentSize,还有它getBoundingBox的影子。为了具体搞清楚这些细节的东西,写了点代码,测试下。如下图

给一个精灵(100*100),放到它的大小,然后输出值。

Cocos2d-x <wbr>3.x <wbr>getContentSize、getBoundingBox区别
 

getContentSize很容易理解,就是获取到当前物体的大小,但是要注意是本身大小,无论是是缩放还是缩小了,其获取的还是它原来的本身大小。所以放到后还是打印出100*100大小

getBoundingBox就有点学问了,先看看源码说了什么先

Rect Node::getBoundingBox() const

{

    Rect rect(0, 0, _contentSize.width, _contentSize.height);

    return RectApplyAffineTransform(rect, getNodeToParentAffineTransform());

}

返回的是该_contentSize的一个矩阵大小。有点不清不楚

看看API文档写了什么

返回 一个AABB(轴向包围盒)在它的父坐标系中。

返回

一个AABB(轴向包围盒)在它的父坐标系中

好吧,有点味道了,难怪在碰撞检测中经常可以用到,要注意是父坐标中,也就是本地坐标

返回正题,看看上述代码,打印的结果,打印的东东为x,y的最大值跟最小值,给个图吧

Cocos2d-x <wbr>3.x <wbr>getContentSize、getBoundingBox区别
屏幕大小为1136*640

这样的话,

getBoundingBox打印的值就是从这个 左下角开始打印的

那么就是

568 开始,最大的X就是加上140(为缩放后的大小)就是708,噢了。

那么就有一个疑问,假设我把锚点钉0.5 0.5那么它是不是以锚点为原点开始跟上述这样计算?

打印下

1136.000000

100.000000,100.000000

498.000000,638.000000,250.000000,390.000000

可见并不是的。还是以图形的做下角为原点计算。

怎么算得,锚点为0.5 0.5那么图像中间就是为568 320 整个矩形放大后为140*140这样矩形的左下角就是为568-70,320-70那么就是498 250了。O了。

因此一般在检测时,getContentSize、getBoundingBox灵活使用。原理清楚了,怎么写都可以。

转自:http://blog.sina.com.cn/s/blog_13475f3170102vwn9.html

猜你喜欢

转载自blog.csdn.net/ylwdi/article/details/81868796
今日推荐