一,CCActionManager 管理所有節點動作的對象
來看看打飛機里面的一個onEnter 方法
~~~
- (void)onEnter
{
[super onEnter]; //一定要注意添加此方法,否則將停留在開始界面
CGSize winSize = [[CCDirector sharedDirector] winSize];
[CCMenuItemFont setFontSize:20];
[CCMenuItemFont setFontName:@"Arial"];
CCMenuItemFont *startItem = [CCMenuItemFont itemWithString:@"開始游戲" block:^(id sender)
{
_isGameStarted = YES;
CCMenuItem *item = (CCMenuItemFont*)sender;
item.visible = NO;
//6.spawn enemy after 1.0 sec
[self performSelector:@selector(spawnEnemy)
withObject:nil
afterDelay:1.0f];
//7.enable accelerometer
self.isAccelerometerEnabled = YES;
//9.enable touch
self.isTouchEnabled = YES;
}];
startItem.position = ccp(winSize.width / 2, -winSize.height / 2);
_startGameMenu = [CCMenu menuWithItems:startItem, nil];
_startGameMenu.position = CGPointZero;
[self addChild:_startGameMenu];
//7 基本動作 從原來的位置移動到新的位置
id moveBy = [CCMoveBy actionWithDuration:1.0 position:ccp(0, winSize.height)]; //位置的移動
[_startGameMenu runAction:moveBy]; //開始移動
//8 和位置有關的基本動作
//1 CCActionManager
[[[CCDirector sharedDirector] actionManager ] pauseTarget:_startGameMenu];//暫停
[self schedule:@selector(resumeStartMenuAction:) interval:1.0]; //等待十秒之后才能開始移動
//2CCAction 抽象類,幾乎所有的類都繼承該類
//3.CCFiniteTimeAction 該類為有限時間動作,包含CCActionInstant 瞬時動作 和CCActionInterval 區間動作,他們包含了很多不同的動作
//4 CCRepaeatForever 無限重復的動作
//5跟隨節點的動作CCFollow .可以替代Camera
//6 CCSpeed 更還節點動作的速度。
// 7CCOrbitCamera 繼承與CCActionCamera 。使用球坐標系圍繞屏幕中心旋轉攝像機的視角
}
- (void)resumeStartMenuAction:(ccTime)dt
{
[self unschedule:_cmd]; //停止當前動作
[[[CCDirector sharedDirector]actionManager] resumeTarget:_startGameMenu];
}
~~~
二,基本動作:和位置相關的基本動作
~~~
CGSize winSize = [[CCDirector sharedDirector] winSize];
CCSprite *plane = [CCSprite spriteWithFile:@"hero_1.png"];
plane.position = ccp(winSize.width/2, winSize.height/2);
[self addChild:plane];
//2 moveBy 讓節點對象在一定時間內移動一定的像素值 ,這個是相對于原位置的
[plane runAction:[CCMoveBy actionWithDuration:3 position:ccp(50, 0)]];
//3 CCjumpTo
[plane runAction:[CCJumpTo actionWithDuration:4 position:ccp(winSize.width, winSize.height) height:40 jumps:3]];
//4CCJumpBy 相對于原位置的移動 ,相對于原位置的偏移量為 100,0
[plane runAction:[CCJumpBy actionWithDuration:3 position:ccp(100, 0) height:100 jumps:4]];
//5CCBezier TO
ccBezierConfig c = {ccp(300, 100),ccp(50, 50),ccp(-50, -50)};
//1.參數一 相對于原位置的偏移,2,3分別是貝塞爾曲線的兩個控制點
[plane runAction:[CCBezierTo actionWithDuration:3 bezier:c]];
//6 CCplace 將對象直接放到指定的位置
[plane runAction:[CCPlace actionWithPosition:ccp(10, 10)]];
~~~
三,和大小相關的基本動作
~~~
//二 和大小相關的基本動作
// 1 CCScale TO、放大為原來的兩倍
[plane runAction:[CCScaleTo actionWithDuration:2 scale:2]];
//2 CCScale By 縮小相應的倍數
[plane runAction:[CCScaleBy actionWithDuration:3 scale:3]];
[plane runAction:[CCScaleBy actionWithDuration:3 scaleX:0.5 scaleY:0.5]]; //對象的高度和寬度的縮小
~~~
四:和旋轉有關的基本動作
~~~
//三 和旋轉有關的動作
//1 CCRotate To ,by ,超過180逆時針旋轉,《180.順時針旋轉
[plane runAction:[CCRotateTo actionWithDuration:2 angle:290]];
~~~
五,和顯示有關的基本動作
~~~
//四 和顯示有關的動作
//1 CCSHOW
[plane runAction:[CCShow action]];
//2CCHide
[plane runAction:[CCHide action]];
//3 切換uixiang的可視屬性
[plane runAction:[CCToggleVisibility action]];
//4 閃動一定的次數
[plane runAction:[CCBlink actionWithDuration:5 blinks:10]];
~~~
六,和透明度有關的基本動作
~~~
//五 和透明度有關的動作
//1 CCFadeIn 透明度從0 -》 255
[plane runAction:[CCFadeIn actionWithDuration:8]];
//2 CCFadeOut 透明度 從255 - 》0
[plane runAction:[CCFadeOut actionWithDuration:5]];
//3 CCFadeto
[plane runAction:[CCFadeTo actionWithDuration:4 opacity:90]];
~~~
七,和色彩有關的基本動作
~~~
//六 和色彩有關的動作
//1 CCTintTO 在一定時間內將節點著色到某個特定的RGB值
[plane runAction:[CCTintTo actionWithDuration:3 red:100 green:0 blue:1]];
//2 CCTintBy 大致相同
~~~
八和翻轉相關的基本動作
~~~
//七 和翻轉有關的動作
//1 CCFlipX ,CCFlipY
[plane runAction:[CCFlipX actionWithFlipX:YES]];
~~~
2.組合動作
一,組合動作的類
~~~
//八 組合動作
//1 Spawn 動作數據,
[plane runAction:[CCSpawn actions:[CCFadeOut actionWithDuration:4],[CCScaleTo actionWithDuration:3 scale:2], nil]];
// 2 CCSequence 該組合可以按順序執行多個動作,也可以包含多個組合動作
//九 Ease 動作 使用ease動作修改的是節點內部動作的速度,而不是動作的執行時間
id easeAction = [CCEaseBackOut actionWithAction:[CCMoveTo actionWithDuration:2 position:ccp(100+winSize.width/2, winSize.height/2)]];
id action = [CCSequence actions:easeAction,[CCScaleTo actionWithDuration:2 scale:2], nil];
[plane runAction:action];
~~~
二,一個飛機俯沖的組合動作的代碼
~~~
#pragma mark - private methods
-(void) spawnEnemy{
//1.
CGSize winSize = [CCDirector sharedDirector].winSize;
CCSprite *enemySprite = [self getAvailableEnemySprite];
enemySprite.visible = YES;
enemySprite.position = ccp( arc4random() % (int)(winSize.width - enemySprite.contentSize.width) + enemySprite.contentSize.width/2 , winSize.height + enemySprite.contentSize.height + 10);
//2.
float durationTime = arc4random() % 4 + 1;
id moveBy = [CCMoveBy actionWithDuration:durationTime
position:ccp(0,-enemySprite.position.y-enemySprite.contentSize.height)];
int choice = arc4random() % 4 + 1;
id easeMoveBy = nil;
switch (choice) {
case 1:
easeMoveBy = [CCEaseIn actionWithAction:moveBy];
break;
case 2:
easeMoveBy = [CCEaseExponentialIn actionWithAction:moveBy];
break;
case 3:
easeMoveBy = [CCEaseBounceIn actionWithAction:moveBy];
break;
case 4:
easeMoveBy = [CCEaseBackIn actionWithAction:moveBy];
break;
default:
break;
}
id callback = [CCCallBlockN actionWithBlock:^(id sender)
{
CCSprite *sp = (CCSprite*)sender;
sp.visible = NO;
sp.position = ccp(0,winSize.height + sp.contentSize.height + 10);
CCLOG(@"reset enemy plane!");
}];
id action = [CCSequence actions:easeMoveBy,callback, nil];
CCLOG(@"enemySprite x = %f, y = %f",enemySprite.position.x, enemySprite.position.y);
[enemySprite runAction:action];
//3.
[self performSelector:_cmd withObject:nil afterDelay:arc4random()%3 + 1];
}
~~~
三,延遲動作
~~~
//十 延遲動作
id action = [CCSequence actions:[CCDelayTime actionWithDuration:3],[CCMoveTo actionWithDuration:2 position:ccp(100 + winSize.width/2, winSize.height)], nil];
[plane runAction:action];
~~~