iPhone游戲開發之Cocos2d中Actions介紹
iPhone游戲開發中Cocos2d的Actions介紹是本文要介紹的內容,Action就好像給一個cocosNode對象的命令。這些動作通常用來改變物體的屬性,例如位置,旋轉,縮放等。如果這些屬性在一段時間只能被修改的話,那么這中叫做 IntervalAction 的Action。否則,它們叫做InstantAction 的動作。
例如:MoveBy 動作,在一段時間之內,改變了位置這個屬性 ,也就是說它是一個IntervalAction的Action。
- # 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結尾的)都有一個翻轉的動作,執行了一個相反方向的操作。 你可以使用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;
- }
基本的Actions
位置
- MoveBy
- MoveTo
- JumpBy
- JumpTo
- BezierBy
- Place
放大縮小
- ScaleBy
- ScaleTo
旋轉
- RotateBy
- RotateTo
顯示狀態
- Show
- Hide
- Blink
- ToggleVisibility
透明度
- FadeIn
- FadeOut
- FadeTo
- RGB
- TintBy
- TintTo
例子
有些動作,還是需要自己實現了才知道函數是怎么個意思,對于e文的api,不如普通的那種順利,大多都是些C#里面少使用的東西。有些陌生。
- //MoveBy
- d 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
- d jumpByAction = [JumpBy actionWithDuration:3 position:ccp(100,100) height:20 jumps:20];
每次執行,在3秒之內,相對移動100,100,移動方式,以20作為跳躍高度,3秒之內,20次跳躍
- //JumpTo
- d jumpToAction = [JumpTo actionWithDuration:3 position:ccp(100,100) height:20 jumps:20];
使用方式,同上。不同的是移動到100,100
- //BezierBy
- d bezierByAction = [BezierBy actionWithSize:2];
- //ScaleBy
- d scaleByAction = [ScaleBy actionWithDuration:3 scaleX:0.5 scaleY:0.5];
每次執行,3秒之內,精靈逐漸變為原來長寬的一半
- //ScaleTo
- d scaleToAction = [ScaleTo actionWithDuration:3 scaleX:0.4 scaleY:0.5];
- //RotateBy
- d rotateByAction = [RotateBy actionWithDuration:3 angle:30.0];
3秒之內,逐漸向右旋轉30度。
- //RotateTo
- id rotateToAction = [RotateTo actionWithDuration:3 angle:30.0];
- 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];
回滾Actions
基本上都是以"reverse"開頭的方法。就是實現某個Action的相反的動作。
- id move = [MoveBy actionWithDuration:2 position: ccp(80,80)];
- id move_reverse = [move reverse];
上面的move_reverse Action是指將MoveBy Action在2秒鐘移動到ccp(-80,-80)的位置。
小結:iPhone游戲開發之Cocos2d中Actions介紹的內容介紹完了,希望本文對你有所幫助!