CCAction 详解(非原创)
InstantAction
的动作。
例如:MoveBy 动作,在一段时间之内,改变了位置这个属性 ,也就是说它是一个IntervalAction的Action。
Example:
# Move a sprite 50 pixels to the right, and 10 pixels to the top over 2 seconds. [sprite runAction: [MoveBy actionWithDuration:2 position:ccp(50,10)]];
IntervalAction
有一些很有趣的属性
-
它们可以通过时间改变来进行加速
-
EaseIn
-
EaseOut
-
EaseInOut
-
Speed
-
Etc. (See the
EaseActionsTest.m
example for more info)
-
-
所有相对的动作(以By结尾的)和一些绝对的动作(以 To结尾的)都有一个翻转的动作,执行了一个相反方向的操作。
(
[action reverse]
)
你可以使用pause/resume 来停止和恢复action
# Pause actions [[ActionManager sharedManager ] pauseAllActionsForTarget:sprite ] ; # resume actions [[ActionManager sharedManager ] resumeAllActionsForTarget:sprite ] ;
以下的每一个动作,除了极为简单的,我都会加入一个简单的事例,以及描述下将会发生的情况。毕竟,都是物体移动,简单上图片,很难表示清楚究竟发生了什么。尤其是那个jump函数。。动作好多。。呵呵。
简单应用,对一个box精灵进行移动测试:
-(id)init{
self = [super init];
if(nil!=self){
isTouchEnabled = YES;
boxSprite = [Sprite spriteWithFile:@"box.png"];
[boxSprite setPosition:CGPointMake(25, 25)];
[self addChild:boxSprite];
}
return self;
}
- (BOOL) ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *) event
{
UITouch *touch = [touches anyObject];
CGPoint point = [touch locationInView: [touch view]];
//动作的定义
//position
//MoveBy
id moveByAction = [MoveBy actionWithDuration:2 position:ccp(30,50)];
//动作的执行
[boxSprite runAction:rotateByAction];
return YES;
}
有些动作,还是需要自己实现了才知道函数是怎么个意思,对于e文的api,不如普通的那种顺利,大多都是些C#里面少使用的东西。有些陌生。
-
position
-
//MoveBy
id moveByAction = [MoveBy actionWithDuration:2 position:ccp(30,50)];
每次执行,相应精灵位置x,y增加30,和50,时间是2秒之内,移动方式,缓慢移动
-
//MoveTo
id moveToAction = [MoveTo actionWithDuration:3 position:[[Director sharedDirector]convertCoordinate:point]];
每次执行,相应精灵移动到触摸位置,3秒之内,移动过去
-
//JumpBy
id jumpByAction = [JumpBy actionWithDuration:3 position:ccp(100,100) height:20 jumps:20];
每次执行,在3秒之内,相对移动100,100,移动方式,以20作为跳跃高度,3秒之内,20次跳跃
-
//JumpTo
id jumpToAction = [JumpTo actionWithDuration:3 position:ccp(100,100) height:20 jumps:20];
使用方式,同上。不同的是移动到100,100
-
BezierBy
//BezierBy
//id bezierByAction = [BezierBy actionWithSize:2];
这个貌似还没有实现,不知道要干什么。
-
//Place
id placeAction = [Place actionWithPosition:[[Director sharedDirector]convertCoordinate:point]];
移动到直接位置,没有时间概念。
本人认为应用方式貌似和以下这个一致。
//MoveTo
id moveToAction = [MoveTo actionWithDuration:0 position:[[Director sharedDirector]convertCoordinate:point]];
-
-
scale
-
//ScaleBy
id scaleByAction = [ScaleBy actionWithDuration:3 scaleX:0.5 scaleY:0.5];
每次执行,3秒之内,精灵逐渐变为原来长宽的一半
-
//ScaleTo
id scaleToAction = [ScaleTo actionWithDuration:3 scaleX:0.4 scaleY:0.5];
原理同上。
-
-
rotation
-
//RotateBy
id rotateByAction = [RotateBy actionWithDuration:3 angle:30.0];
3秒之内,逐渐向右旋转30度。
-
//RotateTo
id rotateToAction = [RotateTo actionWithDuration:3 angle:30.0];
下面三个不再一一举例了,无非就是对物体,可见性,透明度,以及上色的操作。
记住上面这一点。有相对的动作(以By结尾的)和一些绝对的动作(以 To结尾的)。。记住相对和绝对就行了!
-
-
visible
-
opacity
-
r, g, b
例子:
CGSize s = [[Director sharedDirector] winSize]; id actionTo = [MoveTo actionWithDuration: 2 position:ccp(s.width-40, s.height-40)]; id actionBy = [MoveBy actionWithDuration:2 position: ccp(80,80)]; [sprite1 runAction: actionTo]; [sprite2 runAction:actionBy];
Almost all actions have the reverse
method implemented. Basically it creates a new action with the reverse behavior.
Example:
id move = [MoveBy actionWithDuration:2 position: ccp(80,80)]; id move_reverse = [move reverse];
The move_reverse
action will be a MoveBy
action of duration 2, but with the position value of ccp(-80,-80)
.
Attetion plz:
2、解构技能,找出实现80%效果的那20%
3、不要一心二用
4、练习练习再练习!然后获得即时反馈
5、坚持,不要在低谷期放弃