ブロック崩し

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ヨシタケ

ブロック崩し

#1

投稿記事 by ヨシタケ » 12年前

お久しぶりです。
あれから、ステージをいくつか増やしました。

今まで気づかなかったのですが、ブロックとボールの当たり判定を変えてから、
敵と必殺技の判定がされなくなってしまっていました。

必殺技と四角の当たり判定の関数は

コード:

bool HitRectAndSp(Rect2D rectin){
	//必殺技1
	if(spstate == Sp1State1){
		if(HitRectAndRect(sp1hit, rectin)== TRUE)
			return TRUE;
		else
			return FALSE;
	}
	//必殺技3
	if(spstate == Sp3State2 ){
		for(int i = 0; i<3;i++){
			if(HitRectAndRect(sp2hit[i], rectin)== TRUE)
				return TRUE;
			else
				return FALSE;
		}
	}
}
一応、必殺技1のほうのreturn FALSE;のところにブレークポイントをおいて実行すると
止まるのでif(HitRectAndRect(sp1hit, rectin)== TRUE)がちゃんと判定されていないのだと思います。
また、なぜかブロックのほうはちゃんと判定されるため、rectinに敵の当たり判定がちゃんと入ってないのでは
ないかと思っているのですが、よくわかりません。
一応、ソースファイルを下記のサイトにアップしました。パスワードは「YT2013」です。

http://www1.axfc.net/uploader/so/2923367

ball.cppとbar.cppの関数はブロックにボールがあたったときの動きを正常にするためにGame.cppで使うように直しましたが、special.cpp内の関数はそれには関係なかったため、そのままにしています。同じように直したほうがよろしいでしょうか。そのままにしてある別の理由として、Game.cppの行数がとても長くなってしまう、また、例えば敵の計算の関数内の仮引数が敵にもよりますが、多くて4つも使用しています。これにさらに必殺技の内容まで加わるととても多くなってしまうと思っています。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: ブロック崩し

#2

投稿記事 by ISLe » 12年前

アップロードされたソースファイルは見てませんが…

提示されたコードで、必殺技3のとき、真偽のいずれでもリターンしてforループが回らないので、添字0の要素しか判定されません。

必殺技で発射されたオブジェクト単体ごとに当たり判定を行うようにすれば良いのではないでしょうか。
いわゆるオブジェクト指向ですが難しく構えることはないです。
ひとつの関数にいろんな判定要素がごちやごちゃ混ざっているので整理整頓してあげるだけのことです。
引数に無い外部要素も絡んでいますし。

どういう現象が出ているのか具体的に書かれれば、コードを見なくてもたいてい原因は分かるのですけどね。

超絶右留斗羅天才プログラマー
記事: 44
登録日時: 12年前

Re: ブロック崩し

#3

投稿記事 by 超絶右留斗羅天才プログラマー » 12年前

このような感じで直してみたらどうでしょうか?
直らなかったらすみません(*´ω`*)

コード:

bool HitRectAndSp(Rect2D rectin){
    //必殺技1
    if(spstate == Sp1State1){
        if(HitRectAndRect(sp1hit, rectin)== TRUE)
            return TRUE;
        else
            return FALSE;
    }
    //必殺技3
    if(spstate == Sp3State2 ){
        for(int i = 0; i<3;i++){
            if(HitRectAndRect(sp2hit[i], rectin)== TRUE)
                return TRUE;
// ここをコメントアウト
//            else
//                return FALSE;
        }
    }
	return FALSE;	// ここを追加
}
ただの超絶右留斗羅天才プログラマーです。同人ゲーム制作進捗度:7%

ヨシタケ

Re: ブロック崩し

#4

投稿記事 by ヨシタケ » 12年前

すみません。ちょっと情報不足でした。

元々、必殺技3のほうは敵との当たり判定はないようにしようと思っています。(そのあたり、まだ直してませんでした)
今回は、必殺技1のほうです。

超絶右留斗羅天才プログラマー
記事: 44
登録日時: 12年前

Re: ブロック崩し

#5

投稿記事 by 超絶右留斗羅天才プログラマー » 12年前

なるほど、失礼致しました!

必殺技を打っている最中、ブロックと当たり判定を行う際はspstateの値が1でしたが、敵と当たり判定をする際はspstateの値が2になっておりました。

以下のようにすることで、敵と必殺技との当たり判定が正常に行われました。

コード:

bool HitRectAndSp(Rect2D rectin){

	if(spstate == Sp1State1 || spstate == 2 ){ // ここの条件式を増やしました。
		if(HitRectAndRect(sp1hit, rectin)== TRUE)
			return TRUE;
		else
			return FALSE;
	}
	if(spstate == Sp3State2 ){
		for(int i = 0; i<3;i++){
			if(HitRectAndRect(sp2hit[i], rectin)== TRUE)
				return TRUE;
			else
				return FALSE;
		}
	}
}
ただの超絶右留斗羅天才プログラマーです。同人ゲーム制作進捗度:7%

ヨシタケ

Re: ブロック崩し

#6

投稿記事 by ヨシタケ » 12年前

返信遅くなりました。

超絶右留斗羅天才プログラマー 様の
アドバイス通りに変更したところ、敵の判定がされるようになりました。
ありがとうございました。

閉鎖

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