在cocos2d-x中最大的优点在于提供多种动作功能,这也是制作游戏的最常用的功能。cocos2d中的动作分为基本动作和复合动作,在这篇blog中向大家分享下基本动作,在下一篇中将详细的介绍下复合动作。
coocs2d-x提供的基本动作总共有6中,分别是:位置,缩放,旋转,画面显示,透明度,颜色,我们来一一介绍下。
1. 位置:
(1)MoveBy与MoveTo
这两个动作用于在指定的时间内把对象位置移动到指定位置。值得注意的是,动作要由继承了Node类(Layer,Sprite,Label等)的对象执行。
autoaction = MoveBy::create(5.0, Point(300, 300));
5.0秒内移动相对原位置(300,300)
(2)JumpBy与JumpTo
这两个动作用于模仿跳跃的轨迹移动节点对象,即在制定时间内,以指定的高度和次数将节点对象移动到指定位置。JumpBy动作是相对的,目标位置是相对当前位置而言的。JumpTo指的就是移动到指定位置,是绝对的。
例如:原来对象的位置是(100,100);如果都移动(200,200),则JumpBy则移动到了(300,300)的位置,JumpTo还是移动到(200,200);
auto action=JumpBy::creat(5.0,Point(300,0),150,5);
代码的意思是动作在5秒钟内从当前位置移动(300,0),并且跳跃高度为150,跳跃5次。
(3)BeizerBy和BeizerByTo
这两个动作是贝瑟尔曲线动作,沿着ccBezierConfig创建的贝塞尔曲线在制定时间内移动节点对象。在cocos2dx中使用三次贝塞尔曲线,带有起点,终点和2个控制点,创建贝塞尔曲线时,可以通过ccBezierConfig结构体对贝塞尔曲线进行设置:方法如下:
ccBezierConfig bezierconfig;//创建结构体变量bezierconfig;
bezierconfig.controlPoint_1 =Point(200,200);//设置控制点1的坐标为200,200
bezierconfig.controlPoint_2 =Point(400,400); //设置控制点1的坐标为400,400
bezierconfig.endPosition =Point(600,600);//设置终点坐标为600,600
auto action =BezierTo::create(3.0,bezierconfig);//参数3是3秒的意思
spr->runAction(action);
(4)place:
Place与setPosition()方法具有相同的功能,但是Place一般不单独使用,通常用于符合动作。用法如下:
auto action=Place::create(Point(200,200));
2. 缩放
ScaleBy,ScaleTo
这两个动作用于在之指定时间内将将节点对象缩放为指定大小。ScaleBy:以当前对象大小为基准,缩放大小值小于1.0,将缩小对象,大于1.0,将放大对象。ScaleTo:将对象缩放到指定大小,缩放与对象当前大小无关。
比如:
auto spr = Sprite::create("ball.png");
spr->setPosition(Point(100,100));
spr->setScale(2.0);
this->addChild(spr);
autoaction = ScaleBy::create(2.0,2.0);//以当前大小为基准,当前大小是2.0,所以在屏幕上最初显示的是2.0倍的图像,然后由于ScaleBy中还有一个2.0,大于1.0,所以会将图像再放大为2.0倍。
//如果这条语句中的ScaleBy改成了ScaleTo,效果将大大不一样。因为ScaleTo比较的是和当前图像的相对大小关系,如果大于当前的增大,小于当前的缩小。
spr->runAction(action);
3.旋转
RotateBy,RotateTo
这两个动作用于在指定时间内对节点对象旋转指定的角度。使用RotateTo动作时,当输入的角度为正时,按照顺时针防线旋转,输入的角度为负时,按照逆时针方向进行旋转。不过,当旋转角度超过180度时,略有不同。比如:指定的旋转角度为270度后,并非沿着顺时针旋转270,而是逆时针旋转90度,到达沿顺时针旋转270度的位置。换句话说,在使用RotateTo动作时,旋转方向并不是由输入的角度决定,而是根据要旋转到的位置选择能够最快到达的方向进行旋转。RotateBy动作会根据指定的角度进行旋转,比如,设置的角度为270度时,将沿着顺时针方向旋转270,同样,设置旋转角度为-450度时,先逆时针旋转一圈,再逆时针旋转90度。此外,若设置角度时只指定了一个参数,则绕Z轴进行旋转,若指定2个参数,则沿着X轴和Y轴进行旋转。
auto sr = Sprite::create("game/player.png");
sr->setPosition(visibleSize.width/2,visibleSize.height/2);
this->addChild(sr);
auto action = RotateBy::create(10.0,450,270);//绕着X,Y同时进行旋转
auto action = RotateBy::create(10.0, 450, 0);//绕着X轴进行旋转
auto action = RotateBy::create(10.0, 0, 270);//绕着Y轴进行旋转
auto action = RotateBy::create(10.0, 450);//绕着Z轴进行旋转
sr->runAction(action);
4.画面显示
(1)Show,Hide
这两个动作是互为反动作,Show动作是用来显示节点的动作,其功能相当于setVisible(true),Show动作大多用于复合动作。Hide动作的作用是隐藏节点,相当于setVisible(false).
auto action=Show::create();
auto action=Hide::create();
(2)Blink
该动作用于在指定时间内为节点对象闪烁指定次数。
auto action=Blink(3.0,10).//创建Blink动作,指定3秒钟闪烁10次。
(3)ToggleVisibility
该动作用于切换节点对象的可视属相,对调用setVisible()方法设置的结果进行反向切换。节点对象显示在画面上时,执行ToggleVisibility动作后,节点对象将隐藏;反之,节点对象隐藏时执行该动作,将显示节点对象。
auto action=ToggleVisibility::create().
5.透明度
(1)FadeIn,FadeOut()
该动作在指定时间内将对象的 透明度由0变到255,为对象添加淡入效果时常常使用FadeIn动作。使用该动作时,对象的透明度将先强制变为0,然后从0逐渐变为255.若对象已经显示在画面上,执行该动作后,对象的透明度也会被强制变为0,然后淡出。
spr->setOpacity(0;//将透明度设置为0,即不可见。FadeOut动作和FadeIn动作完全相反,在指定时间内将对象的透明度由255变到0.
auto action=FadeIn::create(3.0)//3秒内逐渐显现出来。
spr->runAction(ction);
(2)FadeTo:
该动作在指定时间内把对象的透明度变为指定值。
auto action=FadeTo(3.0,128);//执行动作时,3秒内将其透明度迅速变为128,使之半透明。
6.颜色:
TintBy,TintTo。
对于TintTo动作好理解,就是在指定的时间内变到相应的颜色。
auto action=TintTo::create(3.0,255,0,0);//执行动作后3秒变成红色。
对于TintBy动作,甚是不理解,各位谁若是懂的TintBy动作,一定要私聊我。。。。
,