cocos2d js 笔记一

cocos2d getPosition()取不到实际坐标问题

1、cocos2d,节点默认坐标(0,0),默认锚点(0.5,0.5),顶点节点(最上层节点)的坐标以世界坐标为基准(也就是此节点的坐标(0,0)就是世界坐标的(0,0))。默认层次若没有声明Z坐标,则先addchild()的在下层,后addchild()的在上层(上层覆盖下层),默认父节点在子节点上层。

2、getposition()获取子节点坐标时,获取到的不是世界坐标,而是节点坐标,也就是相对父节点左下角的坐标,也就是以父节点的左下角(锚点0,0)为新坐标的原点形成的新坐标。这样很容易弄错的说,要获取子节点世界坐标,可以用这个语句:要获取CCNode *obj;的世界坐标

CCPoint objpoint = obj->getParent()->convertToWorldSpace(obj->getPosition()));

还有一点容易忽略,我们在对一个节点进行包装的时候其实就是让这个节点有了父节点,例如我新建了一个map类,在map类里面添加了两个background精灵,这样其实background是map的内嵌对象,这样map就是两个精灵的父节点,我取background的坐标其实取的是相对父节点的坐标。

3、对父节点进行的移动会造成它的所有子节点会随着父节点移动,这样结论2也验证了对随父节点运动的子节点取getPosition()的值不会改变事实.

同时,对父节点取setScale(),子节点也会缩放,但是对子节点取getPosition()也还是没有缩放的值,这样会造成取得值比实际值(世界坐标下)大一倍。

cocos2d 包装类和子节点问题

有时候不会在scene里面直接添加精灵,而是会自己建一个精灵类,例如我要添加hero精灵,但是我不会直接在scene里面写

CCSprite *hero=CCSprite::create("hero.png");

而是会自己建一个Hero类,然后在Hero类的onEnter()函数里面写上上述语句,这样就可以在Hero类里面写上hero相关的方法,例如各种动作。

但是这个时候会出现一个问题,就是虽然Hero类是个节点但是其本身并没有可绘制东西,而是依靠其子节点hero来绘制,Hero类本身是可以看成一个无限小的Node,所以对Hero的锚点以及位置设置时,会出现锚点设置无效的情况,这样子节点的坐标始原点始终是Hero->setposition()的那个点。

如果我用setContentSIze对Hero进行设置

Hero->setContentSize(CCSizeMake(480,360));

这样Hero就从一个无限小的节点变成一个480*360的节点,这时锚点的设置会有效了,且hero的坐标原点变成(480*360)的左下角。

这样也从另外的角度解释了setcontentsize并不能改变绘制大小,改变的仅仅是在屏幕上绘制的位置的结论。

cocos2d setContentSize()不能改变绘制大小问题

setcontentsize并不能改变绘制大小,改变的仅仅是在屏幕上绘制的位置,例如setContentSize比实际小,但是还是会全部显示在屏幕上,一般会和setAnchorPoint一起使用,例如

map->setPosition(ccp(0,0));

map->setAnchorPoint(ccp(0,0.1));

map->setContentSize(CCSizeMake(960,620));

在屏幕上显示效果和

map->setPosition(ccp(0,0));

map->setAnchorPoint(ccp(0,0.2));

map->setContentSize(CCSizeMake(960,310));

一样

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 我选择开发一个游戏有很多原因。我觉得自己是“核心”玩家,过去的大部分时间我都花在玩游戏,自己制作、阅读和游戏...
    月影檀香阅读 12,423评论 1 27
  • 前言 LinkedBlockingDeque是基于双向链表的双端有界阻塞队列,使用非公平ReentrantLock...
    zhanglbjames阅读 946评论 0 1
  • 探索“双十一”支付背后的金融科技 探索“双十一”背后的金融科技 昨天双十一阿里巴巴交易6分58秒突破100亿,10...
    shuytu阅读 1,023评论 0 0
  • 文艺点说,时间就如同是白驹过隙。真的就是这样,毫不夸张的说,我都不晓得自己是如何经过高考到现在正式成为一名...
    M小马哥大M阅读 129评论 0 0
  • 中国股市大部分中小投资者其实都是喜欢追涨杀跌的,都是些短线投资者为主。那么在这个短线市场里面如果要想真的赚到钱,那...
    陈仁生阅读 216评论 0 0

友情链接更多精彩内容