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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值