HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2011
0730
actsアクションゲームのスクロール2解決


acts

リンク

2011/7/30(Sat) 14:54:30|NO.40295

何度も質問してすみません…
なかなか検索しても情報が見つからず、質問させていただきます。
今アクションゲームを作成中なのですが
マップスクロール自体はできるのですが、なめらかにはできません。
マップチップ自体が16*16なので16ずつ移動してカクカクになるのは
仕方が無いこととは思いますがなんとかならないでしょうか?

以下スクリプト全文(205行)

screen 0,640,480 //screen0をx 640,y480に設定 buffer 1 //buffer1に画像読み込み picload "ninja.bmp" x=ginfo_winx : y=ginfo_winy buffer 2,x,y //buffer2にbuffer1の画像を反転させて読み込み pos x-1,0 gzoom -x,y,1,0,0,x,y buffer 3:picload "block.bmp" //マップチップをbuffer3に読み込み //定数宣言 #define SCREEN_WIDTH 640 //画面のxサイズ #define SCREEN_HEIGHT 480 //画面のyサイズ #define ME_S_X 24 //自分のxサイズ(gcopyの余白を除く) #define ME_S_Y 32 //自分のyサイズ #define CHIP_SIZE 32.0 //マップチップのx,yサイズ #define MAP_WIDTH SCREEN_WIDTH / CHIP_SIZE //xのチップ数 #define MAP_HEIGHT SCREEN_HEIGHT / CHIP_SIZE //yのチップ数 #define JUMP -12.0 //ジャンプ速度 #define SPEED 0.7 //xに加えるスピード #define GRAVITY 1.1 //yに加える重力 #define FRICTION 0.4 //xに加える摩擦係数? me_x=64 : me_y=480-64 //x,yの初期位置 me_vx=0.0 : me_vy=0.0 //x,yの速度 map_vx=0.1875 :map_vy=0.0 //マップの速度 ,me_vxの最高速度に6分の32掛けたら32ドットになるので1÷6分の32 muki=1 : g_y=0:frm=0 //主人公の向き ,画像のyの何コマ目を絵画するか ,フレーム j_frg=0 : atari_frg=0 //主人公のジャンプフラグ ,当たり判定フラグ sc=0.0 //スクロールの数値 dim map, MAP_WIDTH*3 , MAP_HEIGHT //マップ作成、二次元配列を作る。1の場所にマップチップ絵画 map(0,0)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,1)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,2)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,3)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,4)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,5)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0 map(0,6)=1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 ,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0 map(0,7)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0 map(0,8)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0 map(0,9)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,10)=1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,11)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,12)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,13)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,14)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 gsel 0 *main redraw 0 color 255,255,255:boxf //背景真っ白 repeat MAP_HEIGHT //マップ読み込み。map(wid+sc,hei)=1の時だけマップチップ絵画 hei=cnt repeat MAP_WIDTH wid=cnt if map(wid+sc,hei)==1{ pos CHIP_SIZE*wid ,CHIP_SIZE*hei gcopy 3,0,0,32,32 } loop loop stick key ,5 if (key&1):me_vx-SPEED:muki=2:if frm\2=0:g_y-32 //左が押されっぱなしでme_vxにSPEED減算&アニメの処理 if (key&4):me_vx+SPEED:muki=1:if frm\2=0:g_y+32 //右が押されっぱなしでme_vxにSPEED加算&アニメの処理 if ((key&2)!0)&(j_frg!2):me_vy +=JUMP:j_frg+1 //上が押されていて2回ジャンプしていなかったらme_vyにジャンプ速度を加える //j_frgに1を加える repeat MAP_HEIGHT //map(wid,hei)==1の時だけ *hitcheckに飛ぶ hei=cnt repeat MAP_WIDTH wid=cnt if map(wid+sc,hei)==1{ gosub*hitcheck } loop loop map_vx=0.0 //map_vxを0にする map_vx= 1.0/(CHIP_SIZE/(me_vx+0.000001)) //map_vxの進む割合をme_vxと同じにする //0除算エラーのため0.000001を加算 if me_vx=0.0:if muki=1:g_y=0:else:g_y=64 //もし速度0で右向きならば一コマ目にする逆なら三コマ目 if g_y>=96:g_y=32 //もし4コマ目(存在しない)にいったら2コマ目に飛ぶ if g_y<=-1:g_y=32 //もし-1コマ目(存在しない)にいったら2コマ目に飛ぶ me_vx=limitf(me_vx,-6.4,6.4) //速度の範囲設定 if me_vx>0.0{ //摩擦の設定 me_vx -=limitf(me_vx, 0.0 , FRICTION) } else:if (me_vx<0.0){ me_vx +=limitf(-me_vx, 0.0 , FRICTION) } me_x +=me_vx //主人公のx座標にxの速度を加算 me_y +=me_vy //主人公のy座標にyの速度を加算 if j_frg>=1:me_vy +=GRAVITY //もしジャンプ状態なら(空中にいたら)重力を加算 if me_y>=480:me_y=0 //もし主人公のy座標が真下までいったら上から落ちてくる if j_frg=0:if atari_frg!2:j_frg+1 //もしジャンプ状態ではなく当たり判定も無かったら落ちる //もし右端じゃなく右向きでme_x>CHIP_SIZE*9の位置にあったらme_xを固定してマップ速度加算 if sc!MAP_WIDTH*2:if (me_x>CHIP_SIZE*9)&(muki=1):me_x=CHIP_SIZE*9:sc+map_vx //もし左端じゃなく左向きでme_x>CHIP_SIZE*9の位置にあったらme_xを固定してマップ速度加算 if sc!0.0: if(me_x<CHIP_SIZE*9)&(muki=2):me_x=CHIP_SIZE*9:sc+map_vx if sc>40.0:sc=40.0 //右端までいったらスクロール数値を固定 if sc<0.0:sc=0.0 //左端までいったらスクロール数値を固定 pos me_x,me_y //主人公を絵画 color 255,255,255 :gmode 4,32,32,255 :gcopy muki,g_y,0,32,32 //デバッグ用 pos 0,0:color mes "frm="+frm mes "me_vx="+me_vx mes "me_vy="+me_vy mes "me_x="+me_x mes "me_y="+me_y mes "j_frg="+j_frg mes "atari_frg="+atari_frg mes "sc="+sc atari_frg=0 frm+1 redraw 1 await 16 goto*main *hitcheck //HSP開発wikiにあった当たり判定スプリクトを参考にしています //右に壁があった場合の当たり判定 if me_x+me_vx+ME_S_X+8>=CHIP_SIZE*wid+map_vx { //主人公の右端がマップチップの左端を超えているか if me_x+me_vx+ME_S_X-me_vx+map_vx<=CHIP_SIZE*wid+map_vx { //超えている範囲はマップチップの右端までか if me_y+me_vy+ME_S_Y>=CHIP_SIZE*hei+map_vy+1 { //主人公の下端がマップチップの上端を超えているか if me_y+me_vy < CHIP_SIZE*hei+map_vy+CHIP_SIZE{ //主人公の上端がマップチップの下端を超えているか me_vx= 0.0 atari_frg=1 } } } } //左に壁があった場合の当たり判定 if me_x+me_vx <= CHIP_SIZE*wid+map_vx+ CHIP_SIZE { //主人公の左端がマップチップの右端を超えているか if me_x+me_vx-me_vx+map_vx >= CHIP_SIZE*wid+map_vx+CHIP_SIZE { //超えている範囲はマップチップの左端までか if me_y+me_vy+ME_S_Y > CHIP_SIZE*hei+map_vy+1 { //主人公の下端がマップチップの上端を超えているか if me_y+me_vy < CHIP_SIZE*hei+map_vy+CHIP_SIZE { //主人公の上端がマップチップの下端を超えているか me_vx=0.0 atari_frg=4 } } } } //床の当たり判定 if me_y+me_vy+ME_S_Y>= CHIP_SIZE*hei+map_vy { //主人公の下端がマップチップの上端を超えているか if me_y+me_vy+ME_S_Y-me_vy <= CHIP_SIZE*hei+map_vy { //超えている範囲はマップチップの下端までか if me_x+me_vx+ME_S_X > CHIP_SIZE*wid+map_vx { //主人公の右端がマップチップの左端を超えているか if me_x+me_vx+5 < CHIP_SIZE*wid+map_vx+CHIP_SIZE { //主人公の左端がマップチップの右端を超えているか me_vy= CHIP_SIZE*hei+map_vy-(me_y+me_vy+ME_S_Y)+me_vy atari_frg=2 j_frg=0 } } } } //天井の当たり判定 if me_y+me_vy<=CHIP_SIZE*hei+map_vy+CHIP_SIZE{ //主人公の上端がマップチップの下端を超えているか if me_y+me_vy-me_vy+map_vy>=CHIP_SIZE*hei+map_vy+CHIP_SIZE{ //超えている範囲はマップチップの上端までか if me_x+me_vx+ME_S_X >CHIP_SIZE*wid+map_vx{ if me_x+me_vx+5 < CHIP_SIZE*wid+map_vx+CHIP_SIZE{ me_vy=0.0 atari_frg=8 } } } } return
とても長い&読みにくくて本当に申し訳ありません。



この記事に返信する


てれてれ

リンク

2011/7/30(Sat) 15:20:33|NO.40296


screen 0,640,480 //screen0をx 640,y480に設定 buffer 1 //buffer1に画像読み込み boxf;picload "ninja.bmp" x=ginfo_winx : y=ginfo_winy buffer 2,x,y //buffer2にbuffer1の画像を反転させて読み込み pos x-1,0 gzoom -x,y,1,0,0,x,y buffer 3:color 255:boxf;picload "block.bmp" //マップチップをbuffer3に読み込み //定数宣言 #define SCREEN_WIDTH 640 //画面のxサイズ #define SCREEN_HEIGHT 480 //画面のyサイズ #define ME_S_X 24 //自分のxサイズ(gcopyの余白を除く) #define ME_S_Y 32 //自分のyサイズ #define CHIP_SIZE 32.0 //マップチップのx,yサイズ #define MAP_WIDTH SCREEN_WIDTH / CHIP_SIZE //xのチップ数 #define MAP_HEIGHT SCREEN_HEIGHT / CHIP_SIZE //yのチップ数 #define JUMP -12.0 //ジャンプ速度 #define SPEED 0.7 //xに加えるスピード #define GRAVITY 1.1 //yに加える重力 #define FRICTION 0.4 //xに加える摩擦係数? me_x=64 : me_y=480-64 //x,yの初期位置 me_vx=0.0 : me_vy=0.0 //x,yの速度 map_vx=0.1875 :map_vy=0.0 //マップの速度 ,me_vxの最高速度に6分の32掛けたら32ドットになるので1÷6分の32 muki=1 : g_y=0:frm=0 //主人公の向き ,画像のyの何コマ目を絵画するか ,フレーム j_frg=0 : atari_frg=0 //主人公のジャンプフラグ ,当たり判定フラグ sc=0.0 //スクロールの数値 dim map, MAP_WIDTH*3+1 , MAP_HEIGHT //マップ作成、二次元配列を作る。1の場所にマップチップ絵画 map(0,0)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,1)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,2)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,3)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,4)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,5)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,1,1,1,1,0,1,1,1,1,0,1,1,1,1,0,1,0,0,0 map(0,6)=1,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1 ,0,1,0,0,0,0,1,0,0,1,0,1,0,0,1,0,1,0,0,0 map(0,7)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,1,0,1,1,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0 map(0,8)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,1,1,1,1,0,1,1,1,1,0,1,0,0,1,0,1,1,0,0 map(0,9)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,10)=1,0,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,11)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,12)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,13)=1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ,0,0,0,0,1,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 map(0,14)=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 gsel 0 *main redraw 0 color 255,255,255:boxf //背景真っ白 repeat MAP_HEIGHT //マップ読み込み。map(wid+sc,hei)=1の時だけマップチップ絵画 hei=cnt repeat MAP_WIDTH +1 ;なめらかに動かすために[+1] wid=cnt if map(wid+sc,hei)==1{ pos CHIP_SIZE*wid-(sc\1.0)*32 ,CHIP_SIZE*hei gcopy 3,0,0,32,32 } loop loop stick key ,5 if (key&1):me_vx-SPEED:muki=2:if frm\2=0:g_y-32 //左が押されっぱなしでme_vxにSPEED減算&アニメの処理 if (key&4):me_vx+SPEED:muki=1:if frm\2=0:g_y+32 //右が押されっぱなしでme_vxにSPEED加算&アニメの処理 if ((key&2)!0)&(j_frg!2):me_vy +=JUMP:j_frg+1 //上が押されていて2回ジャンプしていなかったらme_vyにジャンプ速度を加える //j_frgに1を加える repeat MAP_HEIGHT //map(wid,hei)==1の時だけ *hitcheckに飛ぶ hei=cnt repeat MAP_WIDTH +1 ;なめらかに動かすために[+1] wid=cnt if map(wid+sc,hei)==1{ gosub*hitcheck } loop loop map_vx=0.0 //map_vxを0にする map_vx= 1.0/(CHIP_SIZE/(me_vx+0.000001)) //map_vxの進む割合をme_vxと同じにする //0除算エラーのため0.000001を加算 if me_vx=0.0:if muki=1:g_y=0:else:g_y=64 //もし速度0で右向きならば一コマ目にする逆なら三コマ目 if g_y>=96:g_y=32 //もし4コマ目(存在しない)にいったら2コマ目に飛ぶ if g_y<=-1:g_y=32 //もし-1コマ目(存在しない)にいったら2コマ目に飛ぶ me_vx=limitf(me_vx,-6.4,6.4) //速度の範囲設定 if me_vx>0.0{ //摩擦の設定 me_vx -=limitf(me_vx, 0.0 , FRICTION) } else:if (me_vx<0.0){ me_vx +=limitf(-me_vx, 0.0 , FRICTION) } me_x +=me_vx //主人公のx座標にxの速度を加算 me_y +=me_vy //主人公のy座標にyの速度を加算 if j_frg>=1:me_vy +=GRAVITY //もしジャンプ状態なら(空中にいたら)重力を加算 if me_y>=480:me_y=0 //もし主人公のy座標が真下までいったら上から落ちてくる if j_frg=0:if atari_frg!2:j_frg+1 //もしジャンプ状態ではなく当たり判定も無かったら落ちる //もし右端じゃなく右向きでme_x>CHIP_SIZE*9の位置にあったらme_xを固定してマップ速度加算 if sc!MAP_WIDTH*2:if (me_x>CHIP_SIZE*9)&(muki=1):me_x=CHIP_SIZE*9:sc+map_vx //もし左端じゃなく左向きでme_x>CHIP_SIZE*9の位置にあったらme_xを固定してマップ速度加算 if sc!0.0: if(me_x<CHIP_SIZE*9)&(muki=2):me_x=CHIP_SIZE*9:sc+map_vx if sc>40.0:sc=40.0 //右端までいったらスクロール数値を固定 if sc<0.0:sc=0.0 //左端までいったらスクロール数値を固定 pos me_x,me_y //主人公を絵画 color 255,255,255 :gmode 4,32,32,255 :gcopy muki,g_y,0,32,32 //デバッグ用 pos 0,0:color mes "frm="+frm mes "me_vx="+me_vx mes "me_vy="+me_vy mes "me_x="+me_x mes "me_y="+me_y mes "j_frg="+j_frg mes "atari_frg="+atari_frg mes "sc="+sc atari_frg=0 frm+1 redraw 1 await 16 goto*main *hitcheck //HSP開発wikiにあった当たり判定スプリクトを参考にしています //右に壁があった場合の当たり判定 if me_x+me_vx+ME_S_X+8>=CHIP_SIZE*wid+map_vx-(sc\1.0)*32 { //主人公の右端がマップチップの左端を超えているか if me_x+me_vx+ME_S_X-me_vx+map_vx<=CHIP_SIZE*wid+map_vx-(sc\1.0)*32 { //超えている範囲はマップチップの右端までか if me_y+me_vy+ME_S_Y>=CHIP_SIZE*hei+map_vy+1 { //主人公の下端がマップチップの上端を超えているか if me_y+me_vy < CHIP_SIZE*hei+map_vy+CHIP_SIZE{ //主人公の上端がマップチップの下端を超えているか me_vx= 0.0 atari_frg=1 } } } } //左に壁があった場合の当たり判定 if me_x+me_vx <= CHIP_SIZE*wid+map_vx+ CHIP_SIZE-(sc\1.0)*32 { //主人公の左端がマップチップの右端を超えているか if me_x+me_vx-me_vx+map_vx >= CHIP_SIZE*wid+map_vx+CHIP_SIZE-(sc\1.0)*32 { //超えている範囲はマップチップの左端までか if me_y+me_vy+ME_S_Y > CHIP_SIZE*hei+map_vy+1 { //主人公の下端がマップチップの上端を超えているか if me_y+me_vy < CHIP_SIZE*hei+map_vy+CHIP_SIZE { //主人公の上端がマップチップの下端を超えているか me_vx=0.0 atari_frg=4 } } } } //床の当たり判定 if me_y+me_vy+ME_S_Y>= CHIP_SIZE*hei+map_vy { //主人公の下端がマップチップの上端を超えているか if me_y+me_vy+ME_S_Y-me_vy <= CHIP_SIZE*hei+map_vy { //超えている範囲はマップチップの下端までか if me_x+me_vx+ME_S_X > CHIP_SIZE*wid+map_vx-(sc\1.0)*32 { //主人公の右端がマップチップの左端を超えているか if me_x+me_vx+5 < CHIP_SIZE*wid+map_vx+CHIP_SIZE-(sc\1.0)*32 { //主人公の左端がマップチップの右端を超えているか me_vy= CHIP_SIZE*hei+map_vy-(me_y+me_vy+ME_S_Y)+me_vy atari_frg=2 j_frg=0 } } } } //天井の当たり判定 if me_y+me_vy<=CHIP_SIZE*hei+map_vy+CHIP_SIZE{ //主人公の上端がマップチップの下端を超えているか if me_y+me_vy-me_vy+map_vy>=CHIP_SIZE*hei+map_vy+CHIP_SIZE{ //超えている範囲はマップチップの上端までか if me_x+me_vx+ME_S_X >CHIP_SIZE*wid+map_vx-(sc\1.0)*32{ if me_x+me_vx+5 < CHIP_SIZE*wid+map_vx+CHIP_SIZE-(sc\1.0)*32{ me_vy=0.0 atari_frg=8 } } } } return

-(sc\1.0)*32
これを追加しただけです。



acts

リンク

2011/7/30(Sat) 19:14:13|NO.40305

余りに32を掛けてそれを表示させる
全く思いつきませんでしたw
あとなめらかにさせるための+1は変数にして
もし右端までいったら 変数=0として
配列の要素が無効になるエラーがでないようにしました。
回答ありがとうございました。



ONION software Copyright 1997-2021(c) All rights reserved.