ゲームの当たり判定

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
いつの間にか中年

ゲームの当たり判定

#1

投稿記事 by いつの間にか中年 » 14年前

これはコードの書き方というよりもゲームの設計?のような話なのですが
この前、このサイトを見ていてゲームを作りたいな~と思ったものですので
昔、懐かしの「スパルタンX」のコピー作品を作ろうとしています(C歴は1か月ですね)

そこで質問なのですが
当たり判定ってありますよね・・・それの矩形か丸、どちらの当たり判定を使おうか迷っていまして
丸だと縦に長い人型の当たり判定を作れないので矩形を使おうとしています
しかし、矩形だと例えばキャラの足だけに当たり判定をつけようとして場合、
必要な情報が多すぎてごちゃごちゃになってしまいます
自分が考えたのはキャラの体と足と腕は別々のオブジェクトにして後で
座標指定してくっつけてやるというやり方です
(これならば縦の大きさ、横の大きさを求めるだけでいいですからね)

皆さんならどのような形の当たり判定をどのように使いますか?
前述したとおりスパルタンXの様なゲームを作ろうとしていて足だけに当たり判定をつけたいです

いつの間にか中年

Re: ゲームの当たり判定

#2

投稿記事 by いつの間にか中年 » 14年前

昨日、かきわs

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ゲームの当たり判定

#3

投稿記事 by softya(ソフト屋) » 14年前

当たり判定は、体、手、足だけで矩形の当たり判定で十分だと思います。
回転させる必要もなくて、動きに合わせて矩形の当たり判定を発生させたり大きさを変えるだけで良いのでは無いでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

いつの間にか中年

Re: ゲームの当たり判定

#4

投稿記事 by いつの間にか中年 » 14年前

ソフト屋さん、回答ありがとうございます


別々の画像として後からくっつけるというやり方ということですよね


それと回転や大きさを変化させるとはどういうことでしょうか?
スパルタンにそんな動きをする者はなかった気がしますし、
私の文にもそんな言葉を入れた覚えはありませんがどういう意味でしょうか?
(なんか反論してケンカ売ってるみたいに聞こえますけど違いますからね すいません;)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ゲームの当たり判定

#5

投稿記事 by softya(ソフト屋) » 14年前

私の考え方は、絵と当たり判定は別のデータです。
なので、絵で手足をバラバラにする必要はありません。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

いつの間にか中年

Re: ゲームの当たり判定

#6

投稿記事 by いつの間にか中年 » 14年前

何度もごめんなさい 最後にしますので

矩形の当たり判定でオブジェクト全体を当たり判定にするときはこんな変数を作ります↓
左上の座標x,y  右下の座標x+15,y+15

でも腕だけに又は足だけに当たり判定をつけようと思うと
左上の座標x+3,y+4  右下の座標x+13,y+11
とこんな感じの足し算ばかりになって見にくくなりますが
これは仕様がないことなのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ゲームの当たり判定

#7

投稿記事 by softya(ソフト屋) » 14年前

プログラムで直値を書くのではなく、フーレム毎の矩形の当たり判定を配列でもった方がシンプルになると思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

いつの間にか中年

Re: ゲームの当たり判定

#8

投稿記事 by いつの間にか中年 » 14年前

またまたすみません

当たり判定を配列でもつというのはどういうことでしょうか?
物わかりが悪いのは自覚しております

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ゲームの当たり判定

#9

投稿記事 by softya(ソフト屋) » 14年前

コンパイルして検証してませんので、間違っているかも知れません。
データの定義です。

コード:

//	当たり判定構造体
typedef struct {
	int ofs_x,ofs_y;	//相対位置
	int size_x,size_y;	//サイズ
} CollisionData_t;

//	当たりフレーム構造体
typedef struct {
	int frame;	//発生フレーム。次のフレームが出るまではこの当たりが継続する。
	int num;	//当たり数
	CollisionData_t data[3];	//当たりは1フレームあたり最大3つまで。
} CollisionFrame_t;

//	当たりデータ。アニメフレームで変化。
CollisionFrame_t CollisionFrame[] = {
	{0, 1, { {0,0,12,32} } }, //0~14フレーム目、当たり判定は1つの矩形
	{15,2, { {0,0,12,32},{-5,-5,9,8} }},//15フレーム目、当たり判定は2つの矩形
};
使う時は
左上の座標x+CollisionFrame[fno].data[no].ofs_x,y+CollisionFrame[fno].data[no].ofs_y
右下の座標x+CollisionFrame[fno].data[no].ofs_x+CollisionFrame[fno].data[no].size_x,y+CollisionFrame[fno].data[no].ofs_y+CollisionFrame[fno].data[no].size_y
となります。

あくまで例ですので、これ以外にも方法は沢山あります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

いつの間にか中年

Re: ゲームの当たり判定

#10

投稿記事 by いつの間にか中年 » 14年前

私はまだまだプログラムに慣れていないひよっこですので間違っているかもしれないですが

当たり数という変数はいるのでしょうか?どこで使うのですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ゲームの当たり判定

#11

投稿記事 by softya(ソフト屋) » 14年前

当たり数と言うか当たり判定の数ですから、CollisionData_t data[3];の何個が有効なのかわ表す数値です。
このフレーム当たり判定数と言ったほうが良いでしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

いつの間にか中年

Re: ゲームの当たり判定

#12

投稿記事 by いつの間にか中年 » 14年前

また疑問が湧いたので

当たり数はdateが何個有効か表すとおっしゃいましたが
dateの記述数を変えればいいのでは?2コ必要なときは3個目を書かないでおけばいいのでは?

すいません

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: ゲームの当たり判定

#13

投稿記事 by softya(ソフト屋) » 14年前

C言語では構造体に含まれる配列dataの個数は固定せねばなりません。他の言語では可変個数にすることも出来ますがC言語は簡単ではありません。
C言語でdataの部分を可変個数にするにはポインタリストとか面倒なことが必要で初心者向けじゃありませんし、シンプルに初期化することも出来ません。
なので、最大の個数を固定値として選択しました。
固定する以上は有効個数を書くのは自然な成り行きだと思います。
個数を見なくてもsize_x,size_yが0で不要なデータと判定する方法もあります(初期値がない部分は0に初期化されますので)。
ただ、こちらの方が処理は少し面倒な処理になります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る