Hello Actions

0.9.x以降のバージョンで有効です.
hello_actions.jpg

重要:
この例では, いくつかのアクションを実行するための基本的な手順のみを示します.
一部の高度なオプションの初期化については削除されているためとてもシンプルな例と言えます.
一度この例を理解してしまえば, 次のhello_eventsサンプルも読むことができるようになるでしょう.

インポートヘッダー

c / c++ / その他の言語のようにいくつかのヘッダーをインポートする必要があります.

 
// UIWindow, NSAutoReleasePool, その他のオブジェクトの為に必要なインポートです
#import <UIKit/UIKit.h>
 
// インタフェースをインポートします
#import "HelloActions.h"
 

レイヤー

HelloActionsの実装部です.
ラベルとスプライトを持つ2つのレイヤーを作成します.

  • ラベルにはスケールアクションが実行される
  • スプライトにはジャンプ, 回転, シークエンス等複数のアクションが実行される
 
// HelloActions の実装
@implementation HelloActions
 
// "init"メソッド上でインスタンスの初期化を行う必要があります
-(id) init
{
	// ここでは常に"super"のinitメソッドを呼び出します
	// アップルは"super"の戻り値に"self"を割り当てる事を推奨しています
	if( (self=[super init] )) {
 
		//
		// ラベル
		//
 
		// ラベルを生成して初期化する
		CCLabel* label = [CCLabel labelWithString:@"Hello Actions" fontName:@"Marker Felt" fontSize:64];
 
		// ディレクターにウインドウのサイズをたずねます
		CGSize size = [[CCDirector sharedDirector] winSize];
 
		// ラベルのポジションをスクリーンの中心にします
		// 'ccp'はポイントの生成を助けるマクロで、"CoCos Point"を意味しています
		label.position =  ccp( size.width /2 , size.height/2 );
 
		// このレイヤーに子要素としてラベルを追加します
		[self addChild: label];
 
		// Objective-Cでは、静的または動的な言語を使用できます
		// "id" は"型を気にしないオブジェクト"を意味します
		// ラベルを3秒で2.5倍に拡大します
		id action = [CCScaleBy actionWithDuration:3.0f scale:2.5f];
 
		// "ラベルに"アクションを実行する事を伝えます
		// アクションは一回実行され, このレイヤがスクリーンに表示します
		[label runAction:action];
 
		//
		// スプライト
		//
 
		CCSprite *sprite = [CCSprite spriteWithFile:@"grossini.png"];
		sprite.position = ccp( 0, 50);
 
		// パラメータのzはZオーダーのことで, この値が大きいほど手前側にに位置することを意味しています
		// デフォルトでは, zの値は0になっています
		// そのためスプライトはラベルの上部にあることになります
		[self addChild:sprite z:1];
 
		// RotateBy アクションを生成します
		// "By" は相対的であることを意味し,  "To" は絶対的であることを意味しています
		id rotateAction = [CCRotateBy actionWithDuration:4 angle:180*4];
 
		// JumpBy アクションを生成します
		id jumpAction = [CCJumpBy actionWithDuration:4 position:ccp(size.width,0) height:100 jumps:4];
 
		// spawn は複数のアクションを同時に行うアクションです
		id fordward = [CCSpawn actions:rotateAction, jumpAction, nil];
 
		// ほぼ全てのアクションが"reverse" メソッドをサポートしています 
		// アクションを反転させることで新しいアクションを生成することができます
		id backwards = [fordward reverse];
 
		// Sequence は1つのアクションの後に別のアクションを実行できるアクションです
		id sequence = [CCSequence actions: fordward, backwards, nil];
 
		// 最後に, あなたが望む回数だけアクションを繰り返すことができます
		// "RepeatForever"アクションを使用すればアクションを永遠に繰り返すこともできます
		id repeat = [CCRepeat actionWithAction:sequence times:2];
 
		// "スプライト"にアクションを実行することを伝えます
		// アクションは一回実行され, このレイヤがスクリーンに表示します
		[sprite runAction:repeat];
	}
	return self;
}
 
// "dealloc"メソッドでは, 保持している全てのオブジェクトを解放する必要があります
- (void) dealloc
{
	// 何か解放するものがある場合は, ここで解放してください
	// 今回の例では何も解放する必要はありません
	// cocos2dは"ラベル"のような全ての子要素を自動的に解放してくれます
 
	// "super dealloc"を呼び出すのを忘れないでください!
	[super dealloc];
}
@end
 

アプリケーションデリゲート

こちらはアプリケーションデリゲートの実装です. おそらく全てのゲームでこのようなアプリケーションデリゲートを持たせる事になります. 現時点ではこのコードを理解しているかどうかは重要ではありません.

 
@implementation AppController
 
// "window"はプロパティです。. @synthesizeはアクセサメソッドを生成します.
@synthesize window;
 
// アプリケーションのエントリーポイント
- (void) applicationDidFinishLaunching:(UIApplication*)application
{
	// CC_DIRECTOR_INIT() マクロの仕様
	//
	// 1. EAGLViewをゼロビットデプスフォーマットとRGB565レンダーバッファで初期化
	// 2. EAGLViewマルチタッチ: 無効
	// 3. UIWindowを生成して"window" varに割り当てる("window"はあらかじめ宣言されている必要がある)
	// 4. 親となるEAGLViewを新しく生成されたウインドウとする
	// 5. ディレクターをウインドウとリンクさせる
	// 5a. 5.)が失敗したならNSTimerディレクターを使用
	// 6. 60FPSでの実行を試みる
	// 7. FPSの表示: しない
	// 8. デバイスの向き: ポートレイト
	// 9. ディレクターをEAGLViewに接続
	//
	CC_DIRECTOR_INIT();
 
	// 共有されるディレクターを取得する
	CCDirector *director = [CCDirector sharedDirector];
 
	// レイヤーを生成する前にランドスケープモード(横向き)に設定します
	[[CCDirector sharedDirector] setDeviceOrientation:CCDeviceOrientationLandscapeLeft];
 
	// FPSの表示をオンにする
	[director setDisplayFPS:YES];
 
	// マルチタッチを有効にする
	EAGLView *glView = [director openGLView];
	[glView setMultipleTouchEnabled:YES];	
 
	// 空のシーンを生成して初期化する
	CCScene *scene = [CCScene node];
 
	// HelloActionsレイヤーを生成して初期化する
	CCLayer *layer = [HelloActions node];
	// メインシーンの子要素としてHelloActionsレイヤーを追加する
	[scene addChild:layer];
 
	// 実行!
	[director runWithScene: scene];
} 
 
- (void) dealloc
{
	[window release];
	[super dealloc];
}
 
@end
 

メインエントリーポイント

Objective-CでもC言語やC++と同様にmainメソッドがメインエントリーポイントです。

 
int main(int argc, char *argv[]) {
	// 安全のためこれらのラインはそのまま残してください
	NSAutoreleasePool *pool = [NSAutoreleasePool new];
	UIApplicationMain(argc, argv, nil, @"AppController");
	[pool release];
	return 0;
}
 

ヘッダーファイル

そしてこちらがヘッダーファイルです.

 
// このファイルをインポートすることで,cocos2dの全てのクラスをインポート出来ます
#import "cocos2d.h"
 
// アプリケーションデリゲートクラス
@interface AppController : NSObject <UIAccelerometerDelegate, UIAlertViewDelegate,  UITextFieldDelegate, UIApplicationDelegate>
{
	// メインのUIWindow
	// OpenGLビューはこのUIWindowにアタッチされます
	UIWindow *window;
}
 
// メインのUIWindowのプロパティを作成します
@property (nonatomic, retain) UIWindow *window;
@end
 
// HelloActions レイヤー
@interface HelloActions : CCLayer
{
}
@end
 

添付ファイル: filehello_actions.jpg 908件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2010-10-24 (日) 17:14:25 (2586d)