|
 |
|
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
これを追加しただけです。

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