移動できない範囲の設定

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

移動できない範囲の設定

#1

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

お久しぶりです。

ブロック崩しの続きとして,バーに移動できない範囲を設定しようと思っています。
例えば,元の移動できる範囲から
□□□□□□□□□□□□□□□
□□□□□□□□□■■□□□□
□□□□□□□□□■■□□□□
□□□□□□□□□□□□□□□
上の黒い四角の範囲に移動できなくなったりするように考えています。
そこで,バーと四角の当たり判定を考えて,
バーが四角の左側にあたったときバーの位置のx座標が四角の左側になるようにしました。
最初は

コード:

	
if(HitRectAndRect(hit,bar->hit)== TRUE){

			//左側
			if(bar->hit.rb.x >= hit.lt.x &&
				bar->hit.lt.x <= hit.lt.x){
				bar->x = hit.lt.x-12;
			}
			//右側
			if(bar->hit.lt.x  <= hit.rb.x &&
				bar->hit.rb.x  >= hit.rb.x){
				bar->x = hit.rb.x +50;
			}
		}
		if(bar->hit.lt.x > hit.lt.x - bar->hit.width+2 &&
			bar->hit.rb.y < hit.rb.y + bar->hit.width-2){
			//上側
			if(bar->hit.rb.y >= hit.lt.y &&
				bar->hit.lt.y <= hit.lt.y){
				bar->y = hit.lt.y - 5;
			}
			//下側
			if(bar->hit.lt.y <= hit.rb.y &&
				bar->hit.rb.y >= hit.rb.y){
				bar->y = hit.rb.y + 20;
			}
	}
というようにしたのですが,バーが四角にあたる位置によって
例えば,バーを上側からあてたとき
上と左の条件を満たしてしまい,バーのy座標だけでなく,x座標も変わってしまいました。
そこで,今度は
横からあたるとき バーの上辺のx<四角の上辺のx - バーの高さ かつ バーの下辺のx>四角の下辺のx  +バーの高さ
縦からあたるとき バーの左辺のx<四角の左辺のx - バーの幅 かつ バーの右辺のy>四角の右辺のy + バーの幅

コード:

	if(HitRectAndRect(hit,bar->hit)== TRUE){

		if(bar->hit.lt.y > hit.lt.y - bar->hit.height+2 &&
			bar->hit.rb.y < hit.rb.y + bar->hit.height-2){
			//左側
			if(bar->hit.rb.x >= hit.lt.x &&
				bar->hit.lt.x <= hit.lt.x){
				bar->x = hit.lt.x-12;
			}
			//右側
			if(bar->hit.lt.x  <= hit.rb.x &&
				bar->hit.rb.x  >= hit.rb.x){
				bar->x = hit.rb.x +50;
			}
		}
		if(bar->hit.lt.x > hit.lt.x - bar->hit.width+2 &&
			bar->hit.rb.y < hit.rb.y + bar->hit.width-2){
			//上側
			if(bar->hit.rb.y >= hit.lt.y &&
				bar->hit.lt.y <= hit.lt.y){
				bar->y = hit.lt.y - 5;
			}
			//下側
			if(bar->hit.lt.y <= hit.rb.y &&
				bar->hit.rb.y >= hit.rb.y){
				bar->y = hit.rb.y + 20;
			}
		}
	}
というように変更しました。上側と左側は問題なくなったのですが,右側と下側はかわりませんでした。
なにがいけなかったのでしょうか?

また,これよりいい方法があるという場合,どうか教えてください。お願いします。

ヨシタケ

Re: 移動できない範囲の設定

#2

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

さっき,確認して見づらいことに気づきました。
ただ,コードをコピペしても普通に書いてもなぜか1行になってしまいます。
なので,ソースを上げました。パスワードはYT2013です。

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

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

Re: 移動できない範囲の設定

#3

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

ちゃんと表示されていない場合はIE10が原因です。互換モードをお試しください。
あと、前回でデバッグの話で終始したと思いますが今回も同じような質問です。
デバッグすれば、解決策は分からずとも原因は分かりそうなものですが、どこまで調べられたのでしょうか。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 移動できない範囲の設定

#4

投稿記事 by みけCAT » 12年前

移動前の座標を記録→移動する→当たり判定→当たっていたら移動前の座標に戻す
でしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

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