ページ 11

C# (XNA) での当たり判定

Posted: 2011年12月08日(木) 17:09
by Bun
xnaでシューティングゲームを作成しているものですが・・・
19章までのC#向けファイルを見つけることまではできたのですが、それ以降で詰まっています。
最低限シューティングゲームを作るためには自機の当たり判定が欲しいのですが(21章)C#での記述法がわかりません。


どなたか、お助けいただけないでしょうか?

xnaは3.1です。

追伸C# (XNA) での当たり判定

Posted: 2011年12月08日(木) 17:14
by Bun
↑追伸
ソースはここからいただきました。
http://softyasu.net/game/gametop.html

Re: C# (XNA) での当たり判定

Posted: 2011年12月08日(木) 17:58
by beatle
Dixqさんの龍神録をC#+XNAに移植したものだと書いてありますから、多分移植だと思います。
ということで、C言語板の龍神録の21章をC#+XNAに移植すれば良いと思います。

移植の仕方が分からないというのであれば、具体的な質問をお願いします。
例えば、C言語での配列はC#でどうやって書けばいいのか、とか。

Re: C# (XNA) での当たり判定

Posted: 2011年12月08日(木) 18:03
by Bun
ご返事ありがとうございます。
具体的にわからないことは、どこのクラスにどのコードを記述すればいいのか?ということです。

21章でいうstruct.hや、GV.h、load.cpp load、ini.cpp等のC++で記述するべき場所が、C#においてどこに対応しているかが知りたいです。

Re: C# (XNA) での当たり判定

Posted: 2011年12月08日(木) 18:42
by softya(ソフト屋)
私の書いたコードですのがすっかり忘れてております。
なので、まずXNA側コードが元の龍神録と19章までの部分でどの様に対応しているかを先に調べられたほうが良いと思います。
そうすれば、かなり理解が進みますので20章以降も難しくなくなるはずです。

まぁ、21章の場合当たり判定と無敵処理なので自弾の当たり判定を敵と自分の当たり判定に応用すれば作れる気がします。

C# (XNA) での当たり判定

Posted: 2011年12月08日(木) 22:08
by Bun
当たり判定用のクラスが必要になるでしょうか?
また、必要でないならどのクラスに実装するのがよいのでしょうか?
何度も済みませんが、お願いします<(_ _)>

Re: C# (XNA) での当たり判定

Posted: 2011年12月08日(木) 23:03
by softya(ソフト屋)
Bun さんが書きました:当たり判定用のクラスが必要になるでしょうか?
また、必要でないならどのクラスに実装するのがよいのでしょうか?
何度も済みませんが、お願いします<(_ _)>
あった方が良いとは思いますが、まずはShot.csに実装してみたらどうでしょうか?
PlayerShotの当たり判定はPlayerShot.csに実装されていますので参考にして下さい。
なお、当たり判定用のクラスを作るときはShot.csとPlayerShot.csで共通になるように工夫して下さい。。

Re: C# (XNA) での当たり判定

Posted: 2011年12月10日(土) 09:08
by Bun

コード:

public void Collision(Enemy[] enemys,Shot enemyShot,Effect effect)
		{
			//	最大ショット数分
			for( int sn=0 ; sn<plShot.Length ; sn++ ) {
				//	有効なら
				if( plShot[sn].bflag ) {
					//	全部の敵と当たり判定
					for( int en=0 ; en<enemys.Length ; en++ ) {
						//	敵が有効?
						if( enemys[en].IsLive() ) {
							//	自機ショットと敵が当たっていれば
							if( hit_judge(ref plShot[sn],enemys[en]) ) {
								//	当たった弾は消える。
								plShot[sn].bflag = false;
								//	ダメージを与えて敵が死亡したら
								if( enemys[en].HitDamage(plShot[sn].power) ) {
									//	弾幕を中断
									enemyShot.ShotCancel( enemys[en] );
									//	消滅のエフェクト
									effect.EnterDelEffect( enemys[en] );
								}
							}
						}
					}
				}
			}
		}

このようなコードの

コード:

public void Collision(Enemy[] enemys,Shot enemyShot,Effect effect)
には何を書けばいいのでしょうか?

Re: C# (XNA) での当たり判定

Posted: 2011年12月10日(土) 09:39
by softya(ソフト屋)
逆に質問してしまいますが、敵の弾と自機の当たり判定で必要な引数って何でしょうか?
[補足]XNA版の19章のコードをちゃんと理解していれば分かるはずです。

Re: C# (XNA) での当たり判定

Posted: 2011年12月10日(土) 09:52
by Bun
自機の位置、敵の弾座標、あたり範囲などでしょうか。。
いまいち自機の座標をどこから持ってくればいいのかわからないので、簡単なあたり判定も実装できない状況です。

勉強不足ですみません。

Re: C# (XNA) での当たり判定

Posted: 2011年12月10日(土) 10:01
by softya(ソフト屋)
自機の座標変数はどのクラスのなんという名前の変数でしょうか?
あとShot.csは敵弾のクラスですので敵弾の情報は保持しているはずですよね。探してみてください。
当たり範囲は本家龍神録と比べてみてください。忘れてしまっています。

Re: C# (XNA) での当たり判定

Posted: 2011年12月10日(土) 10:03
by Bun
Player.csのdrawPosのようです。
敵の弾情報は、弾幕によって判定する変数などは変えるのでしょうか・・・

Re: C# (XNA) での当たり判定

Posted: 2011年12月10日(土) 10:15
by softya(ソフト屋)
Bun さんが書きました:敵の弾情報は、弾幕によって判定する変数などは変えるのでしょうか・・・
そこら辺は本家と同じですよ。

Re: C# (XNA) での当たり判定

Posted: 2011年12月10日(土) 10:19
by Bun
ありがとうございます。
Player.csのdrawPosを指定するためには、どのように描くのでしょうか?

コード:

Shot enemyShot
のように

コード:

PLayer drawPos
でいいのでしょうか。

Re: C# (XNA) での当たり判定

Posted: 2011年12月10日(土) 10:25
by softya(ソフト屋)
Bun さんが書きました:ありがとうございます。
Player.csのdrawPosを指定するためには、どのように描くのでしょうか?

コード:

Shot enemyShot
のように

コード:

PLayer drawPos
でいいのでしょうか。
その質問はかなりC#の基礎文法の知識の問題ですが、C#の入門書などは勉強されたのでしょうか?
Playerクラスのオブジェクトは何処にあって、drawPosがどういう定義なのか理解されていますか?
[補足]クラスのカプセル化が行われているので単純には取り出せませんし取り出しても行けません。

C# (XNA) での当たり判定

Posted: 2011年12月10日(土) 10:31
by Bun
一応勉強はしたのですが、カプセル化などはなかなか理解できませんでした。
ということは新しく変数を作るというのも一つの手としていいということでしょうか。

Re: C# (XNA) での当たり判定

Posted: 2011年12月10日(土) 10:43
by softya(ソフト屋)
Bun さんが書きました:一応勉強はしたのですが、カプセル化などはなかなか理解できませんでした。
ということは新しく変数を作るというのも一つの手としていいということでしょうか。
drawPosを取り出す為のメソッド関数を追加して下さい。

Re: C# (XNA) での当たり判定

Posted: 2011年12月10日(土) 10:55
by Bun
[quote="softya(ソフト屋drawPosを取り出す為のメソッド関数を追加して下さい。[/quote]

わかりました。

何とかなりそうになってきました。
いろいろ教えてくださりありがとうございました。