objective-cでRPG開発
objective-cでRPG開発
こんにちは
私はiphoneのRPGアプリを作りたい一心でMacを購入し、Objective-cを勉強している者です。
こちらの質問掲示板はもちろん、webで検索、多数のiphoneプログラミング関係の書籍などで3ヶ月ほど調べましたが
どうしてもできないことがあり、勇気を振り絞って質問させて頂きます。
非常に初歩的な質問なんですが2DのRPGのマップを作成しようとしているのですが、他のwebやObjective-c以外の開発環境で
マップデータを
1,0,0,0,0,1
1,0,0,0,0,1
1,0,0,0,0,1
1,0,0,0,0,1
のようにテキスト形式でマップデータを作成し、それをマップチップに変換そして表示ということがObjective-cでできません。
アプリ開発等の書籍を読みあさってもinterface builderの使っての画像の表示などしかなく、途方にくれている状態です。
何卒、ご教授のほどよろしくお願いします。
開発環境
Mac book
X code
Objective-c
私はiphoneのRPGアプリを作りたい一心でMacを購入し、Objective-cを勉強している者です。
こちらの質問掲示板はもちろん、webで検索、多数のiphoneプログラミング関係の書籍などで3ヶ月ほど調べましたが
どうしてもできないことがあり、勇気を振り絞って質問させて頂きます。
非常に初歩的な質問なんですが2DのRPGのマップを作成しようとしているのですが、他のwebやObjective-c以外の開発環境で
マップデータを
1,0,0,0,0,1
1,0,0,0,0,1
1,0,0,0,0,1
1,0,0,0,0,1
のようにテキスト形式でマップデータを作成し、それをマップチップに変換そして表示ということがObjective-cでできません。
アプリ開発等の書籍を読みあさってもinterface builderの使っての画像の表示などしかなく、途方にくれている状態です。
何卒、ご教授のほどよろしくお願いします。
開発環境
Mac book
X code
Objective-c
Re: objective-cでRPG開発
こんにちは。
僕も最近iPhone開発始めて頑張ってます!
http://dixq.net/forum/viewtopic.php?f=3 ... %BA#p66735
drawRect: を使えば出来そうですよ。
あと、マップデータの件は、僕は配列を使って直接コードに入れているので分かりません;;
すみません;
僕も最近iPhone開発始めて頑張ってます!
画像表示は、ついこの間ここでめるぽん様に教えていただきました。kira さんが書きました:書籍を読みあさってもinterface builderの使っての画像の表示などしかなく
http://dixq.net/forum/viewtopic.php?f=3 ... %BA#p66735
drawRect: を使えば出来そうですよ。
あと、マップデータの件は、僕は配列を使って直接コードに入れているので分かりません;;
すみません;
Re: objective-cでRPG開発
black_catさん
早速のご回答ありがとうございます。こんなの早く回答頂けるとは思っていませんでした。
配列とは
int map[5][5]= {
(こんなでしたっけ)
のような2次元配列のことでしょうか?
よろしくお願いします
早速のご回答ありがとうございます。こんなの早く回答頂けるとは思っていませんでした。
もし差し支えなければで結構ですので、black_catさんの”配列を使って直接コードに入れる”方法もお教えいただけませんでしょうか?black_cat さんが書きました:あと、マップデータの件は、僕は配列を使って直接コードに入れているので分かりません;;
すみません;
配列とは
int map[5][5]= {
(こんなでしたっけ)
のような2次元配列のことでしょうか?
よろしくお願いします
Re: objective-cでRPG開発
ソース内に直接データを書くのは、ゲームが大きくなると限界が出てくると思います。
「iphone ファイルアクセス」とかググるとそれっぽいのがヒットします。参考程度にどうでしょう。
>あとは、値が0であれば草原、1であれば岩を配置する等にしていくといいと思います。
>それと、1であれば通行禁止、2であればイベント(今回はありませんが)にするなどで、マップはOKですね。
ビット単位の演算を使うと良いかもしれません。
下位1bitは通行可能or不可能
下位2~5bitはどのマップチップを使うか
下位6bitからはイベント判定用
みたいな感じで。
「iphone ファイルアクセス」とかググるとそれっぽいのがヒットします。参考程度にどうでしょう。
>あとは、値が0であれば草原、1であれば岩を配置する等にしていくといいと思います。
>それと、1であれば通行禁止、2であればイベント(今回はありませんが)にするなどで、マップはOKですね。
ビット単位の演算を使うと良いかもしれません。
下位1bitは通行可能or不可能
下位2~5bitはどのマップチップを使うか
下位6bitからはイベント判定用
みたいな感じで。
Re: objective-cでRPG開発
black_catさん、lbfuvabさん
懇切丁寧なご返答ありがとうございます。
black_catさんに教わった2次元配列を早速試してみたのですが
こんな感じで
#import "UntitledViewController.h"
@implementation UntitledViewController
int map[5][5] = {
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1}
};
const int maplength_i = sizeof map / sizeof map[0];
const int maplength_j = sizeof map[0] / sizeof map[0][0];
for (int i = 0;i < mapLength_i ; i++) { //この部分です
for (int j = 0;j < mapLength_j ; j++) {
NSLog(@"%d",map[j]);
}
}
とりあえず2次元配列の値を表示させる事を第1目標でやりましたが上記 1つ目のfor文で
1 Expected identifier or '(' before 'for'
2 Expected '=' , ',' , ';' , 'asm' or '_attrilbute_' before '<'token
3 Cannot find protocol declaration for 'mapLength_i'
4 Expected '=' , ',' , ';' , 'asm' or '_attrilbute_' before'++'token
以上4つのエラーが出てしまいました。
webで検索したところ”for”の前にあるはずの”(”がないから、又は変数の宣言がされていない等の事が書かれていましたが
いまいち原因がつきとめられません。そしてblack_catさんは具体的に、ここからどのような方法でマップチップを各配列に割り当てていますか?
度重なる質問申し訳ありません。
よろしくお願いします。
lbfuvabさん
とは例えば、テキストファイル等をリソースフォルダに格納して、それをプログラム上で読み込んで表示させるということですか?
ありがとうございます。上記の2次元配列の値の取り出しと合わせて、lbfuvabさんの方法もwebや手元にある書籍等を
見ながら勉強させて頂きます。
懇切丁寧なご返答ありがとうございます。
black_catさんに教わった2次元配列を早速試してみたのですが
こんな感じで
#import "UntitledViewController.h"
@implementation UntitledViewController
int map[5][5] = {
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1}
};
const int maplength_i = sizeof map / sizeof map[0];
const int maplength_j = sizeof map[0] / sizeof map[0][0];
for (int i = 0;i < mapLength_i ; i++) { //この部分です
for (int j = 0;j < mapLength_j ; j++) {
NSLog(@"%d",map[j]);
}
}
とりあえず2次元配列の値を表示させる事を第1目標でやりましたが上記 1つ目のfor文で
1 Expected identifier or '(' before 'for'
2 Expected '=' , ',' , ';' , 'asm' or '_attrilbute_' before '<'token
3 Cannot find protocol declaration for 'mapLength_i'
4 Expected '=' , ',' , ';' , 'asm' or '_attrilbute_' before'++'token
以上4つのエラーが出てしまいました。
webで検索したところ”for”の前にあるはずの”(”がないから、又は変数の宣言がされていない等の事が書かれていましたが
いまいち原因がつきとめられません。そしてblack_catさんは具体的に、ここからどのような方法でマップチップを各配列に割り当てていますか?
度重なる質問申し訳ありません。
よろしくお願いします。
lbfuvabさん
lbfuvab さんが書きました:iphone ファイルアクセス」
とは例えば、テキストファイル等をリソースフォルダに格納して、それをプログラム上で読み込んで表示させるということですか?
lbfuvab さんが書きました:ビット単位の演算を使うと良いかもしれません。
下位1bitは通行可能or不可能
下位2~5bitはどのマップチップを使うか
下位6bitからはイベント判定用
みたいな感じで。
ありがとうございます。上記の2次元配列の値の取り出しと合わせて、lbfuvabさんの方法もwebや手元にある書籍等を
見ながら勉強させて頂きます。
Re: objective-cでRPG開発
なんかfor文とかの処理を、メンバとかと一緒のところに書いちゃいけないみたいです。
(自分はまだまだ勉強不足で詳しい解説はできませんが...)
なので、こんな感じでどうでしょう?
ViewがLoadされたときにforの処理が行われます。
(自分はまだまだ勉強不足で詳しい解説はできませんが...)
なので、こんな感じでどうでしょう?
#import "UntitledViewController.h"
@implementation UntitledViewController
int map[5][5] = {
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1}
};
- (void)viewDidLoad {
[super viewDidLoad];
const int maplength_i = sizeof map / sizeof map[0];
const int maplength_j = sizeof map[0] / sizeof map[0][0];
for (int i = 0;i < maplength_i ; i++) {//この部分です
for (int j = 0;j < maplength_j ; j++) {
NSLog(@"%d",map[i][j]);
}
}
}
Re: objective-cでRPG開発
>lbfuvabさん
Windowsでも大きいものを作ったことがないので気づきませんでした!
僕も勉強になりました。
おお、そういう理由でマップデータを別にするのですね!lbfuvab さんが書きました:ソース内に直接データを書くのは、ゲームが大きくなると限界が出てくると思います。
Windowsでも大きいものを作ったことがないので気づきませんでした!
僕も勉強になりました。
Re: objective-cでRPG開発
ええと、僕はRPGを作っている訳ではないので(ただ、データ上でのマップ移動はしました。)、マップチップは使ってないのですが、kira さんが書きました:ここからどのような方法でマップチップを各配列に割り当てていますか?
ちょっと考えてみますね。
Re: objective-cでRPG開発
こんばんわ
毎日の質問責め、申し訳ありません。
black_catさんのお教えどうりにやったところ2次元配列のソース、コンパイル通りましたが
画面に何も表示されませんでした。しかしエラーが出なかっただけでもすごくうれしいです。
今、原因をつきとめようとgoogleで検索しながら勉強しているところです。うーん、道は険しいですね
毎日の質問責め、申し訳ありません。
black_catさんのお教えどうりにやったところ2次元配列のソース、コンパイル通りましたが
画面に何も表示されませんでした。しかしエラーが出なかっただけでもすごくうれしいです。
今、原因をつきとめようとgoogleで検索しながら勉強しているところです。うーん、道は険しいですね
Re: objective-cでRPG開発
http://dixq.net/forum/viewtopic.php?f=3 ... %BA#p66735
のNO.7でめるぽんさんが仰っている作業はされましたか?
あと、上で
(j * マップチップのxサイズ, i * マップチップのyサイズ) に草原描画
と言いましたが、正式にはここで再描画の命令を出してください。
リンクのNO.10でめるぽんさんに教えていただきました。
のNO.7でめるぽんさんが仰っている作業はされましたか?
あと、上で
(j * マップチップのxサイズ, i * マップチップのyサイズ) に草原描画
と言いましたが、正式にはここで再描画の命令を出してください。
リンクのNO.10でめるぽんさんに教えていただきました。
めるぽん さんが書きました:drawRect: は、再描画が必要になったときに「システムが」 呼び出すもので、自分で直接呼び出すものではないです。
自分で指定した場所に描画したい場合は、メンバに持たせるなりして下さい。
あと再描画が必要な場合も drawRect: を直接呼び出してはいけないです。そういう場合には setNeedsDisplay を使って下さい。
setNeedsDisplay はシステムへ再描画を要求する命令で、そうすると、どこかのタイミングでシステムが drawRect: を呼び出してくれます。
Re: objective-cでRPG開発
こんばんわ
black_catさん お世話になります
めるぽんさんの仰っていた内容なのですが私が無知ゆえに、正直に申しますと良く理解できずにいます。
見よう見まねでソースを書いてみたのですが・・・・。
非常にお恥ずかしい限りです。当然のごとく多数のエラーが発生しました。
明日から一週間、仕事の関係でパソコンができない状況になってしまいますので
iphoneでwebの閲覧そして書籍をもう一度読み直します。
テンパってこんなになってしまいました
black_catさん お世話になります
めるぽんさんの仰っていた内容なのですが私が無知ゆえに、正直に申しますと良く理解できずにいます。
見よう見まねでソースを書いてみたのですが・・・・。
非常にお恥ずかしい限りです。当然のごとく多数のエラーが発生しました。
明日から一週間、仕事の関係でパソコンができない状況になってしまいますので
iphoneでwebの閲覧そして書籍をもう一度読み直します。
テンパってこんなになってしまいました
//UntitleViewController.h
#import <UIKit/UIKit.h>
@interface UntitledViewController : UIViewController {
}
@end
@interface HogeView : UIView {
}
@end
//UntitleViewController.m
#import "UntitledViewController.h"
@implementation UntitledViewController
int map[5][5] = {
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1}
};
-(void)viewDidload {
[super viewDidLoad];
HogeView *mori,*sougen=[[[HogeView alloc]
[mori,sougen drawRect];
const int mapLength_i = sizeof map / sizeof map[0];
const int mapLength_j = sizeof map[0] / sizeof map[0][0];
for (int i = 0;i < mapLength_i ; i++) {
for (int j = 0;j < mapLength_j ; j++) {
switch (map[i][j]) {
case 0:
HogeView mori=[[[HogeViewalloc]initWithFrame:self.view.bounds]autorelease];
[self setNeedsDisplay:YES];
break;
case 1:
HogeView sougen=[[[HogeViewalloc]initWithFrame:self.view.bounds]autorelease];
[self setNeedsDisplay:YES];
break;
default:
break;
}
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (void)viewDidUnload {
}
- (void)dealloc {
[super dealloc];
}
@end
@implementation HogeView
-(void)drawRect:(CGRect)rect {
UIImage *mori=[UIImage imageNamed:@"森1.png"];
UIImage *sougen=[UIImage imageNamed:@"草原.png"];
[mori,sougen drawAtPoint:CGPointMake];
}
@end
Re: objective-cでRPG開発
UntitleViewController.hのほうはそれでいいと思います。
とりあえずコードを書いてみました。
自分でもこんな感じでいいのかよく分からないのですが...
UntitleViewController.m
えっとー、、、
まず、kiraさんの書かれたコードでは、drawRectの中のdrawAtPointで、
座標が指定されていませんよね?
これではMacが困ってしまうんで、ちゃんと指定してあげましょう。
それと、forの意味がなくなってしまっています。
ただ同じように何度も再描画するようになっています。
そのほか色々直してみたので、よかったら試してみてください^^
[編集]ミスを訂正
まぁ急いでいるのでなければ落ち着いていきましょう;kira さんが書きました:テンパって
とりあえずコードを書いてみました。
自分でもこんな感じでいいのかよく分からないのですが...
UntitleViewController.m
#import "UntitledViewController.h"
int x, y, kind; // x,y・・・マップチップの座標 kind・・・マップチップの種類
UIImage *sougen, *mori;
@implementation UntitledViewController
int map[5][5] = {
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1},
{1,0,0,0,1}
};
- (void)viewDidLoad {
[super viewDidLoad];
HogeView *view = [[[HogeView alloc] initWithFrame:self.view.bounds] autorelease];
[self.view addSubview:view];
sougen = [UIImage imageNamed:@"草原.png"];
mori = [UIImage imageNamed:@"森1.png"];
[view setNeedsDisplay];
}
@end
@implementation HogeView
- (void)drawRect:(CGRect)rect {
const int maplength_i = sizeof map / sizeof map[0];
const int maplength_j = sizeof map[0] / sizeof map[0][0];
for (int i = 0;i < maplength_i ; i++) {
for (int j = 0;j < maplength_j ; j++) {
kind = map[i][j];
switch (kind) {
case 0:
x = j * sougen.size.width;
y = i * sougen.size.height;
[sougen drawAtPoint:CGPointMake(x, y)];
break;
case 1:
x = j * mori.size.width;
y = i * mori.size.height;
[mori drawAtPoint:CGPointMake(x, y)];
break;
default:
break;
}
}
}
}
@end
まず、kiraさんの書かれたコードでは、drawRectの中のdrawAtPointで、
座標が指定されていませんよね?
これではMacが困ってしまうんで、ちゃんと指定してあげましょう。
それと、forの意味がなくなってしまっています。
ただ同じように何度も再描画するようになっています。
そのほか色々直してみたので、よかったら試してみてください^^
そうですか。では、お帰りになられてから試してみてくださいね!kira さんが書きました:明日から一週間、仕事の関係でパソコンができない状況になってしまいますので
[編集]ミスを訂正
Re: objective-cでRPG開発
black_catさん
こんばんは、御世話になります
配列要素の取り出しや描画の仕方、ソースの構成等々
大変勉強になります。black_catさんのソースの中身を本を
片手に繰り返し勉強させて頂きます。
一週間後の帰宅が楽しみです。
こんばんは、御世話になります
配列要素の取り出しや描画の仕方、ソースの構成等々
大変勉強になります。black_catさんのソースの中身を本を
片手に繰り返し勉強させて頂きます。
一週間後の帰宅が楽しみです。
Re: objective-cでRPG開発
black_catさん
こんにちは
お久しぶりです。一週間ぶりに仕事から戻り、早速教わったコード試してみました。
コンパイルは通ったのですが画面になにも表示されませんでした。
sougen,mori の size の部分はマップチップの実際の大きさ(数字)を入れるのですか?
ちなみに 32 * 32 でとりあえず作ってます。
お忙しいところ申し訳ありません。
こんにちは
お久しぶりです。一週間ぶりに仕事から戻り、早速教わったコード試してみました。
コンパイルは通ったのですが画面になにも表示されませんでした。
switch (kind) {
case 0:
x = j * sougen.size.width;
y = i * sougen.size.height;
[sougen drawAtPoint:CGPointMake(x, y)];
break;
case 1:
x = j * mori.size.width;
y = i * mori.size.height;
[mori drawAtPoint:CGPointMake(x, y)];
break;
default:
break;
ちなみに 32 * 32 でとりあえず作ってます。
お忙しいところ申し訳ありません。
Re: objective-cでRPG開発
あれ?おかしいですね...kira さんが書きました:コンパイルは通ったのですが画面になにも表示されませんでした。
僕の環境では描画されてます。
XcodeでちゃんとResourcesに画像を追加していますか?
あと、プロジェクトのテンプレートは何ですか?
いえ、そのままで動きますよ。kira さんが書きました:sougen,mori の size の部分はマップチップの実際の大きさ(数字)を入れるのですか?
32と書いても同じですけどね^^
Re: objective-cでRPG開発
こんばんわ
black_catさん お世話になります。
今、再び試しているのですが
追加→既存のファイル”でOKですよね?
View-based Applicationです。
black_catさん お世話になります。
今、再び試しているのですが
はい追加しております。画像の追加はResourcesに”ドラッグドロップ”又は”右クリック→black_cat さんが書きました:XcodeでちゃんとResourcesに画像を追加していますか?
追加→既存のファイル”でOKですよね?
x code ver 3.2.5black_cat さんが書きました:あと、プロジェクトのテンプレートは何ですか?
View-based Applicationです。
Re: objective-cでRPG開発
んー...kira さんが書きました:x code ver 3.2.5
View-based Applicationです。
僕も同じなのですけどねー。
困りました。なぜ描画されないのでしょうかねーf(^_^;;)
Re: objective-cでRPG開発
black_catさん
度々すいません
こちらinterface bilderでxibファイルの方は何もいじらなくて大丈夫ですよね?
度々すいません
こちらinterface bilderでxibファイルの方は何もいじらなくて大丈夫ですよね?
Re: objective-cでRPG開発
はい。大丈夫なはずなんですが...
僕がXcodeからこのサイトにコピペする時にどこかが抜けたのかと思い、
今度は新規プロジェクトを作って、自動生成のコード削除&このサイトからXcodeにコピペしてみたのですが、ちゃんと描画されました。
xibはいじってません。
そこで、差し支えなければkiraさんのプロジェクトを添付してもらえないでしょうか?
僕がXcodeからこのサイトにコピペする時にどこかが抜けたのかと思い、
今度は新規プロジェクトを作って、自動生成のコード削除&このサイトからXcodeにコピペしてみたのですが、ちゃんと描画されました。
xibはいじってません。
そこで、差し支えなければkiraさんのプロジェクトを添付してもらえないでしょうか?
Re: objective-cでRPG開発
black_catさん
使用したことがないのですがファイルアップローダーですか?
願ってもございません。ぜひお願いしたいのですが情けない事に添付の仕方がわかりません。black_cat さんが書きました:そこで、差し支えなければkiraさんのプロジェクトを添付してもらえないでしょうか?
使用したことがないのですがファイルアップローダーですか?
Re: objective-cでRPG開発
すいません
できました。よく確認もせずに申し訳ありません
よろしくお願いします
できました。よく確認もせずに申し訳ありません
よろしくお願いします
- 添付ファイル
-
- Untitled.zip
- (761.36 KiB) ダウンロード数: 159 回
Re: objective-cでRPG開発
間違っている箇所が分かりました!
viewDidLoadがviewDidloadになってました!
Objective-Cは大文字と小文字を区別しますよ^^
viewDidLoadがviewDidloadになってました!
Objective-Cは大文字と小文字を区別しますよ^^
Re: objective-cでRPG開発
black_catさん
うおおおおおーーー!!
表示できましたあ!!
このお礼は何て申し上げていいのやら・・・・
簡単な入力ミスで多大なご迷惑をおかけしてしまい申し訳ありませんでした。
black_catさんには貴重なお時間を割いて頂いて心の底から感謝しております。
IOSシミュレーターの画面にマップが表示された瞬間、雄叫びをあげてしまいました。
(といっても全てblack_catさんのコードを真似しただけですが・・・あと近所迷惑)
私もたくさん勉強してblack_catさんの様に人に教えられるぐらいのレベルに早くなりたいです。
本当に本当にありがとうございました、重ねてお礼申し上げます。
うおおおおおーーー!!
表示できましたあ!!
このお礼は何て申し上げていいのやら・・・・
簡単な入力ミスで多大なご迷惑をおかけしてしまい申し訳ありませんでした。
black_catさんには貴重なお時間を割いて頂いて心の底から感謝しております。
IOSシミュレーターの画面にマップが表示された瞬間、雄叫びをあげてしまいました。
(といっても全てblack_catさんのコードを真似しただけですが・・・あと近所迷惑)
私もたくさん勉強してblack_catさんの様に人に教えられるぐらいのレベルに早くなりたいです。
本当に本当にありがとうございました、重ねてお礼申し上げます。
Re: objective-cでRPG開発
僕はまだまだレベル低いですよwkira さんが書きました:black_catさんの様に人に教えられるぐらいのレベル
ほぼ初心者ですからf(^_^;;)
まぁでも解決できたようで何よりです^^
その気持ち、とっても分かります!!kira さんが書きました:IOSシミュレーターの画面にマップが表示された瞬間、雄叫びをあげてしまいました。
やりたかったことが出来たときって本当にうれしいですもんね。
あと、余裕があればlbfuvabさんが仰ってたやり方もやってみてくださいね。
そのほうがよいみたいですので。
ではお互いiPhone開発、頑張っていきましょう!