现在的位置: 首页 > 综合 > 正文

cocos2d anchor与moveBy、moveTo

2018年06月09日 ⁄ 综合 ⁄ 共 2191字 ⁄ 字号 评论关闭
复制代码
 1 const CCPoint CCPointZero = CCPointMake(0,0);
 2         switch(i) 
 3         {
 4             case 0:
 5                 sprite->setAnchorPoint( CCPointZero );
 6                 break;
 7             case 1:
 8                 sprite->setAnchorPoint( ccp(0.5f, 0.5f) );
 9                 break;
10             case 2:
11                 sprite->setAnchorPoint( ccp(1,1) );
12                 break;
13         }
复制代码

对应的效果:(0,0)在左sprite下角;(0.5,0.5)在sprite中心点;(1.0,1.0)在sprite右上角。

如果设置(0.5,1.0)则:(图上所画的绿点,就是sprite->setPosition的地方)
在XX项目中,为什么子弹的锚点要设置在(0.5,1.0)上呢?
如果设置在(0.5,0.5)那么子弹一开始就会露出一半,如果这时,控制它隐藏将增加程序的复杂度,位置-子弹的半个身位。

   cocos2d-x action By To的区别;moveBy moveTo

  先看一下by的英文解释:通过、经过;to的英文解释:到、向;第一次看引擎时确实,没看出两者的区别,今天看demo发现moveBy使用时用了reverse,moveTo没用,是不是moveBy的reverse是他特有的?看了看文档,果然moveTo没有reverse方法。

  moveTo就是移动到某点,moveBy就是经过某点再原路返回。

1     CCActionInterval*  actionTo = CCMoveTo::actionWithDuration(2, CCPointMake(s.width-40, s.height-40));
2     CCActionInterval*  actionBy = CCMoveBy::actionWithDuration(2, CCPointMake(80,80));
3     CCActionInterval*  actionByBack = actionBy->reverse();
4 
5     m_tamara->runAction( actionTo);
6     m_grossini->runAction( CCSequence::actions(actionBy, actionByBack, NULL));

同理其它action

 今天在项目中,又看了一下MoveTo和MoveBy,我以前理解错了一些!CCMoveBy::actionWithDuration(2, CCPointMake(80,80));这里的ccp(80,80)不是像ActionTo中的一样(屏幕上的目标坐标点);这里是偏移量(80,80) ? 这里不是点吗? 对,它对于CCMoveBy是相对于CCNode原先的坐标点横坐标向右偏移80个像素,纵坐标也偏移80个像素。

复制代码
1     CCActionInterval*  actionTo = CCMoveTo::actionWithDuration(2, CCPointMake(s.width-40, s.height-40));
2     CCActionInterval*  actionBy = CCMoveBy::actionWithDuration(2, CCPointMake(80,80));
3     CCActionInterval*  actionByBack = actionBy->reverse();
4 
5     m_tamara->runAction( actionTo);
6     m_grossini->runAction( CCSequence::actions(actionBy, actionByBack, NULL));
7     // m_grossini->runAction(actionBy);
8 m_kathia->runAction(CCMoveTo::actionWithDuration(1, CCPointMake(40,40)));
复制代码

 综上:                               CCMoveTO                       CCMoveBy 


actionWithDuration中的ccp 移动到的坐标点           相对于CCNode现在的坐标点的偏移量

有无reverse            无(空方法)                 有(可以轻松的做往返动作)


 看来不亲自试试,光看很难掌握事物的全貌;虽然上面我也贴代码了,和现在贴的其实是一样的,但是就没去修改下试试,仅仅是看了看!今天修改游戏程序代码金币的动作时突然发现了To和By先前没意识到的区别。

本文出自:http://li-bonan.blog.163.com/blog/static/135564770201302515653653/


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

重点:

1、持续动作中设计to的是没有reverse函数的,而by是有reverse函数

2、by系列函数传递的是移动的向量,那么相对于原始点的移动方向是什么。其实传递的参数是一个CCPoint,实际移动的效果

是在x轴方向移动ccp的x坐标值大小,在y轴方向移动cpp的y坐标值大小

抱歉!评论已关闭.