|
ごきげんよう、ハイテクです。 前回に引き続いての作業です。 リソースの用意、クラスの作成 †まず、このページの左上にある「あひる」を保存します。 これをプロジェクトに追加します。 続いて、オブジェクトを追加します。
テンプレートの段階でもいろいろ書いてありますね。 クラスの加筆 †まず、あひるを表示するためにArteOGLImageTextureをインスタンス変数に追加します。 @interface Duck : ArteOGLObject {
ArteOGLImageTexture *tex; //テクスチャ
}
のように、Duck.hのinterfaceのところに追記します。 変数を追加したので、先立って解放のコードを追加します。 - (void)dealloc{
[tex release], tex = nil;
[super dealloc];
}
生成・代入についてはOGLcalc:内で行います。 - (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;
}
コメントアウトを解除し、属性を設定します。 ビューへの追加 †
追加します。
- (void)ArteOGL:(id <ArteOGLViewProtocol>)view keyPressed:(unichar)key{
switch (key) {
case NSLeftArrowFunctionKey:
[duck addSpeedX:-10];
break;
case NSRightArrowFunctionKey:
[duck addSpeedX:10];
break;
case NSUpArrowFunctionKey:
[duck addSpeedY:10];
break;
case NSDownArrowFunctionKey:
[duck addSpeedY:-10];
break;
default:
break;
}
}
- (void)ArteOGL:(id <ArteOGLViewProtocol>)view keyReleased:(unichar)key{
switch (key) {
case NSLeftArrowFunctionKey:
[duck addSpeedX:10];
break;
case NSRightArrowFunctionKey:
[duck addSpeedX:-10];
break;
case NSUpArrowFunctionKey:
[duck addSpeedY:-10];
break;
case NSDownArrowFunctionKey:
[duck addSpeedY:10];
break;
default:
break;
}
}
(書き途中 |