加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

[cocos2d-x]坐标系,触屏自定义检测CCSprite的点击拖动等信息

发布时间:2020-12-14 21:21:41 所属栏目:百科 来源:网络整理
导读:http://blog.csdn.net/chiuan/article/details/8596465 一、cocos2d-x中的2个常用坐标系: 屏幕坐标系 :默认原点在左上角,x轴向右、y轴向下 --------------------------------------------x轴 | | | | v y轴 GL坐标系 :默认原点在左下角,x轴向右、y轴向

http://blog.csdn.net/chiuan/article/details/8596465

一、cocos2d-x中的2个常用坐标系:

屏幕坐标系:默认原点在左上角,x轴向右、y轴向下

-------------------------------------------->x轴

|

|

|

|

v

y轴


GL坐标系:默认原点在左下角,x轴向右、y轴向上(怎么记忆?这么明显GL,L字是不是和下图很像呢?)

y轴

|

|

|

|

----------------------------------------->x轴


二、坐标系的使用

2.1、屏幕坐标系:

一般使用在Touch事件中,也就是默认Touch事件处理(能获取)的是屏幕坐标系。想想我们手指按的是?当然是屏幕拉!


2.2、GL坐标系

理解:

关于3D世界里面的本地坐标系和世界坐标系,在cocos2d-x里面同样都是GL坐标系。也就是说,跟位置相关的处理,都是GL坐标系,但要注意区分是在本地,还是世界中。

例如Node中的setPosition处理的就是本地坐标-GL坐标系,我们关于本地和到世界坐标系的点互换,在CCNode中有提供相关便捷的方法:convertToNodeSpace、convertToWorldSpace等。

备注:

getContentSize 获得节点原始大小。

boundingBox 获得经过在父物体中缩放和旋转之后的外框大小。

例子:

关于平常我们使用特别要注意,是否判断在同一个坐标系系统中处理!

例如我们要实现CCSprite的触碰检测,但是这个CCSprite又放在一个CCLayer下面,这个CCLayer又放在一个CCSence下的某个CCLayer下。(-,-)其实就是多个层级的情况下。


[cpp] view plain copy print ?
  1. boolTDInvItemSlot::ccTouchBegan(CCTouch*pTouch,CCEvent*pEvent){
  2. CCRectrect=this->boundingBox();
  3. if((&rect)->containsPoint(this->getParent()->convertTouchToNodeSpace(pTouch))){
  4. CCLOG("selected.......");
  5. this->setTexture(selectedTexture);
  6. returntrue;
  7. }
  8. returnfalse;
  9. }

以上判断中,先获取这个CCSprite的父物体,然后通过父物体把Touch(屏幕坐标信息)转到父物体的本地坐标系(GL坐标系)中,因为boundingBox()获取的就是在父物体中经过变化后的位置范围大小信息。

所以,熟悉Unity3D引擎的,我相信对本地坐标系和世界坐标系已经相当熟悉了,判断当然要在同一个相对“世界”,这里是父物体的世界中判断!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读