複数のマップのめり込みを防ぐ
投稿者 : アシッド(softbank218180184139.bbtec.net)
- 2006/07/23(Sun) 12:45
No.10105
|
|
|
|
|
extends SpriteChar; function onDie(){//死んだ時自動的に実行されます。 if ($nokori==0){//残り0機だったら、 $projectManager.loadPage($page_gameover);//ゲームオーバー }else{//そうでなかったら、 $projectManager.loadPage($page_index2);//今のページ $nokori=3;//残り3機 } }
$map.setBGColor(color(0,0,0)); // 背景色を設定 anim=newAnimation(); $mplayer.play($se_spmario4,1,128); while (1) { anim.pause($pat_player2+0,$pat_player2+0,2); if (y>$screenHeight) die();//{$mplayer.play($se_mgn64_mario_4);} if (getkey(39)&& $map.getAt(x+21,y)!=$pat_Block3+0) { x+=8;
f=0; anim.swing($pat_player2+0,$pat_player2+2,2); } // ↑ カーソルキー右が押され、さらに右側が壁でなければ右へ移動 if (getkey(37) && $map.getAt(x-21,y)!=$pat_Block3+0) { x-=8; f=1; anim.swing($pat_player2+0,$pat_player2+2,2); } // ↑ カーソルキー左が押され、さらに左側が壁でなければ左へ移動 y+=vy; // vy: y 方向の速度。 yにvy を加える if ($map.getAt(x,y+27)==$pat_Block3+0 ) { // ブロックに当たっていたら vy=0; // 落下速度を0にする if (getkey(88)) vy=-10; // スペースキーを押したらジャンプ if(getkey(88)==1){$mplayer.play($se_jamp);} } else { // ブロックに当たっていなかったら anim.swing($pat_player2+3,$pat_player2+4,2); vy+=1; // 落下速度を上げる if (getkey(88)) vy-=0.7; //落下速度をすこし下げる } $map.scrollTo(x-$screenWidth/2,0); // スクロールする
update(); }
今こういうプログラムなんですが複数のマップのめり込みを防ぐようにするにはどうすればよいですか?
|
Re: 複数のマップのめり込みを防ぐ
投稿者 : アカシン(210.230.239.64)
- 2006/07/24(Mon) 14:47
No.10116
|
|
|
|
「複数のマップのめり込みを防ぐ」というのは、 ブロックの画像を$pat_Block3+0以外のものも使用したい ということで良いでしょうか。
基本的に総当りで判定を行う必要があると思います。 ブロックの判定部分を関数化したものの例を以下に示します。
//[ ブロック判定用関数 ] // ($map.getAt(x,y)==$pat_Block3+0) 等と同義 //引数:判定を行う座標 //返値:ブロックがある場合-1,ない場合-0 function isBlock(x,y){ var flag; flag=0; if($map.getAt(x,y)==$pat_Block3+0) flag=1; else if($map.getAt(x,y)==$pat_Block3+1) flag=1; else if($map.getAt(x,y)==$pat_Block3+2) flag=1; //以下同様に return flag; }
この場合、$pat_Block3+0,$pat_Block3+1,$pat_Block3+2の画像が ブロックとして扱われます。
メインプログラムの側もこれに応じて修正します。 例えば、以下のような感じです。 if ($map.getAt(x,y+27)==$pat_Block3+0 ) → if ( isBlock(x,y+27) )
|
なつかしい
投稿者 : 迦葉(toyonakans.ecs.cmc.osaka-u.ac.jp)
- 2006/07/25(Tue) 12:21
No.10117
|
|
|
|
if($map.getAt(x,y)>=$pat_Block3+0 && $map.getAt(x,y)<=$pat_Block3+20) flag=1;
で私はやってます。
|
すいません。適当すぎました
投稿者 : 迦葉(toyonakans.ecs.cmc.osaka-u.ac.jp)
- 2006/07/25(Tue) 12:33
No.10118
|
|
|
|
if($map.getAt(x,y)>=$pat_Block3+0 && $map.getAt(x,y)<=$pat_Block3+20) flag=1;
の $pat_Block3+20 は適当に決めてます。 床画像を作るときに、移動不可能にしたいものだけ集めて、それらを移動不可能なものにする、と言うときに使います。
アカシンさんのとやってることは変わりませんが、床画像が100枚近くになると、こんなかんじで範囲選択したほうが楽です。
それと今回の件とは関係ありませんが $map.getAt(x,y)>=$pat_Block3+0 は $map.getAt(x,y+vy)>=$pat_Block3+0 にした方が、地面にめりこまなくて良いかと。 その代わり微妙に引っかかった感じになりますが。
|
Re: 複数のマップのめり込みを防ぐ
投稿者 : アシッド(softbank218180184139.bbtec.net)
- 2006/07/29(Sat) 16:13
No.10140
|
|
|
|
|