当たり判定4

 
〜前書き〜
   前回の ロケットの画像と紫色の部分との当たり判定 は 当たり判定をする部分が
   ウインドウの右半分で しかも 横方向だけの
   当たり判定でした しかし今度は もっと違った当たり判定をします
 
〜2次元的当たり判定?〜
   では 前回のプログラムをどう改良すれば 横だけでなく
   縦方向の当たり判定が出来るのでしょうか? 
   if文を改良すれば良いんだろう・・・多分

	
	screen 0,300,300	;画面のサイズを300、300にする
	buffer 2		;仮想画面 ID2を作る
	picload "zyuunana-1.bmp";画像をロードする
	gsel 0,1		;ウインドウ0を描画先にする

	repeat			;繰り返しの始め
	redraw 2		;画面には描画しない
	color 0,0,0:boxf	;黒で画面を塗りつぶす
	color 100,0,100		;描画色を紫に
	boxf 150,150,190,190	;ウインドウの一部分を塗りつぶす
	stick key,1+2+4+8	;keyという変数に 押されているキー番号を入力
	if key=1:x=x-3		;keyが1だったらxから3を引いてxに入力
	if key=2:y=y-3		;keyが2だったらyから3を引いてyに入力
	if key=4:x=x+3		;keyが4だったらxから3を足してxに入力
	if key=8:y=y+3		;keyが8だったらyから3を足してyに入力
	pos x,y			;x,yの位置に
	gcopy 2			;ID2のウインドウから 今の描画先へ画像を転送する
	if (x+32>150) and (x<190) and (y+32>150) and (y<190):{	;当たり判定
		pos 0,0				;文字の位置を0,0に
		color 255,255,255		;描画色を白にする
		print "進入!"			;進入!と表示する
			}
	redraw 1		;一気に描画
	await 1			;待つ
	loop			;repeatヘ戻る

    あってたね
   あまり改良してないでしょ
   へっへっへ 実は今回書くところを少なくしようとして 前回のプログラムを
   改良が加えやすいようにしておいたのさ(←それがどーした)
 
〜プログラムの解説〜
   

   boxf 150,150,190,190    ;ウインドウの一部分を塗りつぶす

   これは 当たり判定をするエリアを小さくしたので 塗りつぶすエリアも
   小さくしたのです 何でこのサイズかと言うと ・・・なんとなく・・・
    ついでに言うけど 上のプログラムだと
   四角く塗りつぶす左上の位置が 横150縦150 右下が横190縦190 の位置だよ
 

   if (x+32>150) and (x<190) and (y+32>150) and (y<190):{

   これは むつかしぃ・・・ どうやって説明しよう・・・・・
   ・・・まずロケットが 紫のエリア(150,150,190,190) に入ってるってのは どういうことかを知らないとね
    まぁ1つづつ行こうではないか
 
   x+32>150 ってのは ロケットの右側(x+32)が150(紫の左側のX座標(横側))より数字が大きければ
          つまり ロケットの右側が 紫の左側より右に行っていたら と言うことだ
   x<190 ってのは ロケットの左側(x)が190(紫の右側のX座標)より数字が小さければ
          つまり ロケットの左側が 紫の右側より左にあれば ってことだ
   y+32>150 ってのは ロケットの下側(y+32)が 150(紫の上側のY座標(縦))より数字が大きければ
          つまり ロケットの下側が 紫の上側より下にあれば ってことだ
   y<190 ってのは ロケットの上側(y)が 190(紫の下側のY座標)より数字が小さければ
          つまり ロケットの上側が 紫の下側より上にあれば ってことだ
   そして その条件がすべて OK だったら そのときに 紫とロケットは当たっているってことだ
〜当たってるってこと〜
   ものとものが当たってるってことは どう言うことだと思う?

   じゃあ 紙を2枚用意してください

   それを重なるようにおいてください

   上の4つの条件が一致してるか見てください ロケットが青い方の紙で
      紫のエリアは黒い紙だとしてね
   ロケットの右側が 紫の左側より右に行っていたら ってのはどうだ?
   青い紙の右側が 黒い紙の左側より右 ・・・合ってるね
   ロケットの左側が 紫の右側より左にあれば ってのはどうだ?
   青い紙の左側が 黒い紙の右側より左 ・・・合ってるね
   ロケットの下側が 紫の上側より下にあれば ってのはどうだ?
   青い紙の下側が 黒い紙の上側より下 ・・・合ってるね
   ロケットの上側が 紫の下側より上にあれば ってのはどうだ?
   青い紙の上側が 黒い紙の下側より上 ・・・合ってる
    
   全部合ってたね もちろん紙は重なるように置いたのだから 人間が見ればこの2つは当たってるね
   「ものと、ものが当たってるかどうか」というのは 上のような4つの条件がそろっていれば
   当たってると言えるのだ
   いろいろと 紙を動かして ためすといいよ
   例えば 紙の中に紙を入れたときとか 紙のはしっこ同士が重なってるときとか
   いろいろやってみるといい
    何で上の4つなのかということは自分で 研究してくれ(^^)
 

戻る コウザへ ホームへ