ごきげんよう、ハイテクです。

前回に引き続いての作業です。
ので、前回の状況からの作業開始になります。


リソースの用意、クラスの作成

まず、このページの左上にある「あひる」を保存します。

ピクチャ 2.png


これをプロジェクトに追加します。
ウインドウにドラッグ&ドロップです。

ピクチャ 3.png


続いて、オブジェクトを追加します。
新規ファイルから「ArteOGLObject」のテンプレートをもとに新規クラスを作成します。
「Duck」クラスと名付けましょう。

ピクチャ 4.png


テンプレートの段階でもいろいろ書いてありますね。

クラスの加筆

まず、あひるを表示するためにArteOGLImageTextureをインスタンス変数に追加します。

@interface Duck : ArteOGLObject {
	ArteOGLImageTexture *tex; //テクスチャ
}

のように、Duck.hのinterfaceのところに追記します。
Objective-Cでは@interface宣言の「{」と「}」の間に変数定義することで
クラスにインスタンス変数を追加することができます。
なお、クラス変数というものはObjective-Cには存在しません。
同等の機能を利用したい場合は、C言語の大域変数を使うのが通例です。

変数を追加したので、先立って解放のコードを追加します。
ガベコレなんてものは使わないのでretain-release制を使います。
忘れがちですが、忘れるとメモリ漏れちゃうぜ。

- (void)dealloc{
	[tex release], tex = nil;
	
	[super dealloc];
}

生成・代入についてはOGLcalc:内で行います。
init:内で行っても大丈夫なはずですが、まぁ、なんとなく。
(処理付加分散的にあんまよくないので、このあたりは将来的に変更されるかもです。(ぉぃ )

- (void)OGLcalc:(id <ArteOGLViewProtocol>)arteview{

	if(tex == nil){
		tex = [[ArteOGLImage sharedTextureNamed:@"duck"] retain];
	}
	
	[super OGLcalc:arteview];
	
}

画像テクスチャは直接生成するのでなくArteOGLImageを通すことでキャッシングを行えます。

描画については
既存のソースを削除し(今回は回転などは使わないので)、テクスチャオブジェクトに描画をさせる一行を追加します。

- (void)OGLdraw:(id <ArteOGLViewProtocol>)arteview{
	
	[tex OGLdrawInRect:NSMakeRect(texpoint.x, texpoint.y, texsize.width, texsize.height) fraction:texalpha];
	
}

texpoint、texsize、texalphaはArteOGLObjectから継承したインスタンス変数です。

それと、初期化処理の部分。

- (id)init{
	if(self =[super init]){
		coordmode = ArteOGLObjectSystemCoordMode;
		
		lifecount = -1; //寿命なし。
		extralife = 20; //死んだ後のフェード
		
		attackFlag = NO; //攻撃フラグなし
		targetFlag = YES; //被攻撃フラグあり
		physicalFlag = NO; //物理演算なし
		staticFlag = NO; //固定なし
		livingFlag = YES; //生存フラグあり
	}
	return self;
}

コメントアウトを解除し、属性を設定します。

ビューへの追加

追加します。

ピクチャ 1.png

(書き途中


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS