ハイテク講座/ArteOGL.3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
ごきげんよう、ハイテクです。
前回に引き続いての作業です。
ので、前回の状況からの作業開始になります。
&br;
*** リソースの用意、クラスの作成 [#o4504b1a]
まず、このページの左上にある「あひる」を保存します。
#ref(ピクチャ 2.png)
&br;
これをプロジェクトに追加します。
ウインドウにドラッグ&ドロップです。
#ref(ピクチャ 3.png)
&br;
続いて、オブジェクトを追加します。
新規ファイルから「ArteOGLObject」のテンプレートをもとに新...
「Duck」クラスと名付けましょう。
#ref(ピクチャ 4.png)
&br;
- Duck.h
//
// Duck.h
// ArteOGLSample
//
// Created by 計算技術 on 09/10/22.
// Copyright 2009 K3. All rights reserved.
//
#import <ArteOGL/ArteOGL.h>
@interface Duck : ArteOGLObject {
}
@end
- Duck.m
//
// Duck.m
// ArteOGLSample
//
// Created by 計算技術 on 09/10/22.
// Copyright 2009 K3. All rights reserved.
//
#import "Duck.h"
@implementation Duck
- (id)init{
if(self =[super init]){
//coordmode = ArteOGLObjectSystemCoordMode or ArteOGLO...
//lifecount = -1;
//extralife = 20;
//attackFlag = NO;
//targetFlag = NO;
//physicalFlag = NO;
//staticFlag = NO;
//livingFlag = YES;
}
return self;
}
/*
- (void)setProperty:(NSDictionary *)dic{
[super setProperty:dic];
//if([dic objectForKey:@""]!=nil) ;
}
*/
- (void)OGLcalc:(id <ArteOGLViewProtocol>)arteview{
//write calcuration code here
[super OGLcalc:arteview];
}
- (void)OGLdraw:(id <ArteOGLViewProtocol>)arteview{
// write draw code in here
if(texblend)[arteview setBlendMode:texblend];
if(rotatedegree!=0)[arteview enterRotate:rotatedegree w...
[arteview frameRect:NSMakeRect(texpoint.x,texpoint.y,te...
if(rotatedegree!=0)[arteview escapeRotate];
if(texblend)[arteview revertBlendMode];
}
@end
テンプレートの段階でもいろいろ書いてありますね。
*** クラスの加筆 [#m4a955f8]
まず、あひるを表示するために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"] retai...
}
[super OGLcalc:arteview];
}
画像テクスチャは直接生成するのでなくArteOGLImageを通すこ...
描画については
既存のソースを削除し(今回は回転などは使わないので)、テ...
- (void)OGLdraw:(id <ArteOGLViewProtocol>)arteview{
[tex OGLdrawInRect:NSMakeRect(texpoint.x, texpoint.y, t...
}
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;
}
コメントアウトを解除し、属性を設定します。
*** ビューへの追加 [#f3aadf7f]
- ArteOGLSampleController.h
#import "Duck.h"
@interface ArteOGLSampleController : ArteOGLController {
Duck *duck;
}
-ArteOGLSampleController.m
- (void)ArteOGL:(id <ArteOGLViewProtocol>)view registerA...
[super ArteOGL:view registerAsDelegate:controller];
//write your code here.
duck = [[Duck alloc] init];
[duck setSize:NSMakeSize(80, 80)];
[view setObject:duck];
}
追加します。
- (void)ArteOGL:(id <ArteOGLViewProtocol>)view keyPresse...
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 keyReleas...
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;
}
}
#ref(ピクチャ 1.png)
(書き途中
終了行:
ごきげんよう、ハイテクです。
前回に引き続いての作業です。
ので、前回の状況からの作業開始になります。
&br;
*** リソースの用意、クラスの作成 [#o4504b1a]
まず、このページの左上にある「あひる」を保存します。
#ref(ピクチャ 2.png)
&br;
これをプロジェクトに追加します。
ウインドウにドラッグ&ドロップです。
#ref(ピクチャ 3.png)
&br;
続いて、オブジェクトを追加します。
新規ファイルから「ArteOGLObject」のテンプレートをもとに新...
「Duck」クラスと名付けましょう。
#ref(ピクチャ 4.png)
&br;
- Duck.h
//
// Duck.h
// ArteOGLSample
//
// Created by 計算技術 on 09/10/22.
// Copyright 2009 K3. All rights reserved.
//
#import <ArteOGL/ArteOGL.h>
@interface Duck : ArteOGLObject {
}
@end
- Duck.m
//
// Duck.m
// ArteOGLSample
//
// Created by 計算技術 on 09/10/22.
// Copyright 2009 K3. All rights reserved.
//
#import "Duck.h"
@implementation Duck
- (id)init{
if(self =[super init]){
//coordmode = ArteOGLObjectSystemCoordMode or ArteOGLO...
//lifecount = -1;
//extralife = 20;
//attackFlag = NO;
//targetFlag = NO;
//physicalFlag = NO;
//staticFlag = NO;
//livingFlag = YES;
}
return self;
}
/*
- (void)setProperty:(NSDictionary *)dic{
[super setProperty:dic];
//if([dic objectForKey:@""]!=nil) ;
}
*/
- (void)OGLcalc:(id <ArteOGLViewProtocol>)arteview{
//write calcuration code here
[super OGLcalc:arteview];
}
- (void)OGLdraw:(id <ArteOGLViewProtocol>)arteview{
// write draw code in here
if(texblend)[arteview setBlendMode:texblend];
if(rotatedegree!=0)[arteview enterRotate:rotatedegree w...
[arteview frameRect:NSMakeRect(texpoint.x,texpoint.y,te...
if(rotatedegree!=0)[arteview escapeRotate];
if(texblend)[arteview revertBlendMode];
}
@end
テンプレートの段階でもいろいろ書いてありますね。
*** クラスの加筆 [#m4a955f8]
まず、あひるを表示するために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"] retai...
}
[super OGLcalc:arteview];
}
画像テクスチャは直接生成するのでなくArteOGLImageを通すこ...
描画については
既存のソースを削除し(今回は回転などは使わないので)、テ...
- (void)OGLdraw:(id <ArteOGLViewProtocol>)arteview{
[tex OGLdrawInRect:NSMakeRect(texpoint.x, texpoint.y, t...
}
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;
}
コメントアウトを解除し、属性を設定します。
*** ビューへの追加 [#f3aadf7f]
- ArteOGLSampleController.h
#import "Duck.h"
@interface ArteOGLSampleController : ArteOGLController {
Duck *duck;
}
-ArteOGLSampleController.m
- (void)ArteOGL:(id <ArteOGLViewProtocol>)view registerA...
[super ArteOGL:view registerAsDelegate:controller];
//write your code here.
duck = [[Duck alloc] init];
[duck setSize:NSMakeSize(80, 80)];
[view setObject:duck];
}
追加します。
- (void)ArteOGL:(id <ArteOGLViewProtocol>)view keyPresse...
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 keyReleas...
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;
}
}
#ref(ピクチャ 1.png)
(書き途中
ページ名: