今回もcocos2dの記事です。(多分4回目)
CCActionクラスの派生クラスを使ったいくつかのActionを紹介してみます。
本来ならたくさんコードを書かなければいけないような動きも、
cocos2dなら簡単に表現できます!(^ω^)
CCActionクラスとその派生クラス
cocos2dにはオブジェクトを動かす(アクションさせる)為の
CCActionクラスとその派生クラスがたくさん用意されています。
クラス名 | アクション内容 |
CCRotateTo | 指定した角度になるまで回転させる |
CCRotateBy | 現在の角度+指定した角度になるまで回転させる |
CCMoveTo | 指定した座標まで移動させる |
CCMoveBy | 現在の座標+指定した座標まで移動させる |
CCScaleTo | 指定した大きさに変える |
CCScaleBy | 現在の大きさ×指定した大きさに変える |
CCBlink | 点滅させる |
CCFadeIn | フェードインさせる |
CCFadeOut | フェードアウトさせる |
CCFadeIn | フェードインさせる |
CCFadeOut | フェードアウトさせる |
他にもありますが、とりあえず一例です。
上記のクラスは全てCCActionクラスを基底クラスに持っています。
アクションを実行させたり停止させる時は以下のメソッドを利用します。
メソッド名 | 内容 |
runAction:(アクション) | アクションを適用する |
stopAction:(アクション) | アクションを停止する |
stopAllActions | 全てのアクションを停止する |
フレームワークを使わないで実装するとしたらとても面倒な処理が数行で書けてしまいます。
賢いな、さすがcocos2dかしこい(^ω^)
今回は
- CCRotateTo
- CCRotateBy
- CCMoveTo
- CCMoveBy
- CCFadeIn
- CCFadeOut
この6種類のアクションを紹介してみます。
CCRotateTo、CCRotateByで回転させる
回転に関するアクションです。
CCRotateToは角度になるまで回転、
CCRotateByは現在の角度+指定した角度になるまで回転してくれます。
回転が終わった時にもう一度アクションを実行した場合、
rotateByは再び動き出しますが、
rotateToは指定された角度になっているので動きません。
どちらも回転する時間と角度を指定するだけで使えます。
2 | CCRotateBy *rotateBy = [CCRotateBy actionWithDuration:1 angle:180]; |
3 | [アクション対象 runAction:rotateBy]; |
6 | CCRotateBy *rotateTo = [CCRotateTo actionWithDuration:1 angle:180]; |
7 | [アクション対象 runAction:rotateTo]; |
CCMoveTo、CCRotateByで移動させる
移動に関するアクションです。
大体CCRotateの時と同じです。
CCMoveToは指定した座標まで移動、
CCMoveBy は現在の座標+指定した座標まで移動します。
移動する時間と、座標を指定して使います。
2 | CCMoveBy *moveBy = [CCMoveBy actionWithDuration:1 position:ccp( 100, 100 )]; |
3 | [アクション対象 runAction:moveBy]; |
6 | CCMoveBy *moveTo = [CCMoveTo actionWithDuration:1 position:ccp( 100, 100 )]; |
7 | [アクション対象 runAction:moveTo]; |
CCFadeIn、CCFadeOutでフェードイン、フェードアウト
フェードイン、フェードアウトに関するアクションです。
じんわりと消えたり現れたりします。
変化する時間を指定するだけです。
1 | CCFadeIn *fadeIn = [CCFadeIn actionWithDuration:1]; |
2 | [アクション対象 runAction:fadeIn]; |
4 | CCMoveBy *fadeOut = [CCFadeOut actionWithDuration:1]; |
5 | [アクション対象 runAction:fadeOut]; |
サンプルプログラム
-GitHub
github.com/ouka-tenshi/iOS-Sample/tree/master/Cocos2dCCActionSample
上で説明したアクションを使った簡単なサンプルです。
各メニューを押したらCCSpriteが動くだけです。
デフォルトのテンプレートプロジェクトから
HelloWorldLayer.mとHelloWorldLayer.hを修正しています。
修正箇所はinitメソッドと、メニューを押された時のメソッドを追加しています。
・HelloWorldLayer.h
2 | @interface HelloWorldLayer : CCLayer <GKAchievementViewControllerDelegate, GKLeaderboardViewControllerDelegate> |
・HelloWorldLayer.m
04 | if ( (self=[super init]) ) { |
07 | CGSize winSize = [[CCDirector sharedDirector] winSize]; |
10 | tenko = [CCSprite spriteWithFile:@ "tenshi.png" ]; |
11 | tenko.position = ccp( winSize.width/2 , winSize.height/2); |
12 | [self addChild:tenko]; |
16 | [CCMenuItemFont setFontName:@ "AppleGothic" ]; |
17 | [CCMenuItemFont setFontSize:25]; |
18 | CCMenuItemFont *menu1 = [CCMenuItemFont itemWithString:@ "rotateBy" |
20 | selector:@selector(rotateByAction:)]; |
21 | CCMenuItemFont *menu2 = [CCMenuItemFont itemWithString:@ "rotateTo" |
23 | selector:@selector(rotateToAction:)]; |
24 | CCMenuItemFont *menu3 = [CCMenuItemFont itemWithString:@ "moveBy" |
26 | selector:@selector(moveByAction:)]; |
27 | CCMenuItemFont *menu4 = [CCMenuItemFont itemWithString:@ "moveTo" |
29 | selector:@selector(moveToAction:)]; |
30 | CCMenuItemFont *menu5 = [CCMenuItemFont itemWithString:@ "fadeIn" |
32 | selector:@selector(fadeInAction:)]; |
33 | CCMenuItemFont *menu6 = [CCMenuItemFont itemWithString:@ "fadeOut" |
35 | selector:@selector(fadeoutAction:)]; |
36 | CCMenuItemFont *menu7 = [CCMenuItemFont itemWithString:@ "stop" |
38 | selector:@selector(stopAction:)]; |
40 | CCMenu *menu = [CCMenu menuWithItems:menu1,menu2,menu3,menu4,menu5,menu6,menu7, nil]; |
41 | [menu alignItemsVerticallyWithPadding:10]; |
42 | menu.position = ccp( 100, winSize.height/2 ); |
51 | -( void )rotateByAction:(id)sender{ |
52 | CCRotateBy *rotateBy = [CCRotateBy actionWithDuration:1 angle:180]; |
53 | [tenko runAction:rotateBy]; |
55 | -( void )rotateToAction:(id)sender{ |
56 | CCRotateBy *rotateTo = [CCRotateTo actionWithDuration:1 angle:180]; |
57 | [tenko runAction:rotateTo]; |
59 | -( void )moveByAction:(id)sender{ |
60 | CCMoveBy *moveBy = [CCMoveBy actionWithDuration:1 position:ccp( 100, 0 )]; |
61 | [tenko runAction:moveBy]; |
63 | -( void )moveToAction:(id)sender{ |
64 | CGSize winSize = [[CCDirector sharedDirector] winSize]; |
65 | CCMoveBy *moveTo = [CCMoveTo actionWithDuration:1 position:ccp( winSize.width/2, winSize.height/2 )]; |
66 | [tenko runAction:moveTo]; |
68 | -( void )fadeInAction:(id)sender{ |
69 | CCFadeIn *fadeIn = [CCFadeIn actionWithDuration:1]; |
70 | [tenko runAction:fadeIn]; |
72 | -( void )fadeoutAction:(id)sender{ |
73 | CCMoveBy *fadeOut = [CCFadeOut actionWithDuration:1]; |
74 | [tenko runAction:fadeOut]; |
76 | -( void )stopAction:(id)sender{ |
78 | [tenko stopAllActions]; |
【実行結果】
紹介しできなかった他のCCActionのクラスは
cocos2dでつくるiPhoneゲーム―自由で速い、ゲーム用フレームワークを使う! (I・O BOOKS)
この本に大体書いてあります。
初心者でもとってもわかりやすいのでおすすめです(`・ω・´)
次回はCCActionを管理?する
・
CCSequence,
・
CCSpawn,
・
CCRepeat,
あたりを紹介します。
|
|
: : :::::::,. -─´、て
::: :: :::Σco===、!,_ CCActionを使えば速度とか角度とかの計算を
: : :: :::::l´i(ノリハノリ) しなくていいので楽ですね…物理も数学もいらない…
: : :::::ルlリ⊃⊂ヽ
: : ::::(( //xxxxヽ、─────────────────
/~~~
./
ピンバック: 【iPhoneアプリ】「cocos2d for iPhone」でゲームアプリを作ってみる(CCActionを複数使って複雑なアクションを作る) | 桜花満開/テンシホタル