cocos2dx 锚点
来源:互联网 发布:知金教育集团 编辑:程序博客网 时间:2024/06/01 16:54
cocos2dx中经常会用到节点的旋转,一旦涉及到物体的旋转则会涉及到旋转所相对的中心点的位置,对于CCNode而言,其提供了设置锚点的接口,用来设置锚点的相对位置。
见CCNode源代码中CCNode.cpp
/// anchorPoint getterconst CCPoint& CCNode::getAnchorPoint(){ return m_obAnchorPoint;}void CCNode::setAnchorPoint(const CCPoint& point){ if( ! point.equals(m_obAnchorPoint)) { m_obAnchorPoint = point; m_obAnchorPointInPoints = ccp(m_obContentSize.width * m_obAnchorPoint.x, m_obContentSize.height * m_obAnchorPoint.y ); m_bTransformDirty = m_bInverseDirty = true; }}
其锚点的坐标值是一个相对值0~1,其中m_obAnchorPoint表示的是相对锚点坐标,m_obAnchorPointInPoints表示的是锚点在屏幕中的像素坐标,所以对于CCNode的坐标系转换会涉及到多种转换方式。
我们也可以通过设置ignoreAnchorPointForPosition来忽略锚点的作用。
对于图层而言其ignoreAnchorPointForPosition的默认值为false,CCSprite默认值为true,但是有时候大家会发现,即便咱们设置了图层的ignoreAnchorPointForPosition为false,但是图层的旋转仍然没有按照预定的结果来进行,原因是因为默认CCLayer的图层的大小为CCSize(0,0),所以不管你怎么设置图层的大小始终为(0,0),经过锚点比例进行计算之后其锚点的坐标仍然是(0,0),如下图所示:
但是设置了CCLayer的大小之后,就会发现,咱们设置的锚点就能起到作用了
void LayerIgnoreAnchorPointPos::onEnter(){ LayerTest::onEnter();bool ignore = this->isIgnoreAnchorPointForPosition();//this->ignoreAnchorPointForPosition(false);//CCSize layerSize = this->getContentSize();setContentSize(CCDirector::sharedDirector()->getWinSize());setAnchorPoint(ccp(0.5, 1));//CCSize layerSize2 = this->getContentSize();//CCPoint pt = this->getPosition();//setPosition(ccp(layerSize2.width/2, layerSize2.height/2)); CCSize s = CCDirector::sharedDirector()->getWinSize(); CCLayerColor *l = CCLayerColor::create(ccc4(255, 0, 0, 255), 150, 150); l->setAnchorPoint(ccp(0.5f, 0.5f)); l->setPosition(ccp( s.width/2, s.height/2)); CCMoveBy *move = CCMoveBy::create(2, ccp(100,2)); CCMoveBy * back = (CCMoveBy *)move->reverse(); CCSequence *seq = CCSequence::create(move, back, NULL); l->runAction(CCRepeatForever::create(seq)); this->addChild(l, 0, kLayerIgnoreAnchorPoint); CCSprite *child = CCSprite::create("Images/grossini.png"); l->addChild(child); CCSize lsize = l->getContentSize(); child->setPosition(ccp(lsize.width/2, lsize.height/2)); CCMenuItemFont *item = CCMenuItemFont::create("Toggle ignore anchor point", this, menu_selector(LayerIgnoreAnchorPointPos::onToggle)); CCMenu *menu = CCMenu::create(item, NULL); this->addChild(menu); menu->setPosition(ccp(s.width/2, s.height/2));//this->setAnchorPoint(ccp(0.5, 0.5));CCDirector::sharedDirector()->getActionManager()->addAction(CCRepeatForever::create(CCSequence::create(CCRotateBy::create(2, 360),CCRotateBy::create(2, -360),0)),this,false);}
- cocos2dx 锚点
- cocos2dx之锚点
- cocos2dx ---- 锚点
- cocos2dx锚点简述
- Cocos2dx坐标系,锚点
- Cocos2dx锚点
- cocos2dx 坐标和锚点
- cocos2dx 坐标系锚点总结
- cocos2dX改变锚点位置
- Cocos2dx开发之锚点
- Cocos2dx-游戏开发中不同的坐标系,cocos2dx锚点
- Cocos2dx-游戏开发中不同的坐标系,cocos2dx锚点
- cocos2dx 中Layer的锚点
- cocos2dx cocos2d-x AnchorPoint锚点
- 【Cocos2dx开发之锚点实例讲解】
- <一> cocos2dx不同的坐标系,锚点
- Cocos2dx开发之锚点实例
- cocos2dx不同的坐标系,锚点
- Oracl数据库管理方面的资料(查询sga,查看oracle数据库名称sid,查看oracle数据库名称,查看表空间,修改表空间名称,数据库管理,sqlPlus数据显示)
- 《Oracle.11g.从入门到精通》书籍错误
- hdu 4649 Professor Tian
- poj 3984 迷宫问题 bfs
- llvm中如何利用分支概率和基本块频率估计
- cocos2dx 锚点
- 【jiasuba】菜鸟必收藏:Win 8系统最新整理的50个应用技巧
- Beyond Compare(bcompare.exe)报错误“应用程序发生错误”解决方案
- Java实现将ResultSet结果转成json格式
- oracle数据库表空间及归档
- 写一个函数,找出一个整数数组中的第二大数
- B树、B-树、B+树、B*树
- The Big Three Rule
- 调整android系统中的init.rc