まず全体を通してですが
このような書き方だと、あとで見た時に「これ何だっけ???」となる事が多いので
タブやコメントを入れることをおススメします。
そして肝心のジャンプに関してはgotoやgosubが入り乱れているせいで
逆に理解しにくくなっているのではないかという印象があります。
一番初めの所にジャンプフラグ用の変数を用意
jump=0 // ジャンプフラグ(0はジャンプしていない 1がジャンプ中)
スペースキーの処理を少し変更し、ジャンプフラグの状態で処理を行なう
*hata3
stick key,15
if key&1:marix=marix-2
if marix<0:marix=0
if key&4:marix=marix+2
if(key&16) {
// ↓この条件が無いと連打したときジャンプ中にもジャンプ(2段ジャンプなど)になってしまう
if(jump==0) {
jump=1 // ジャンプを行なう
grv=-14
}
}
if jump==1:gosub *hata5; // ジャンプ中ならばジャンプ処理へ
goto *hata4
ジャンプ処理も変更
*hata5
mariy+=grv // これでmariyにgrvを足すという意味になる
grv++ // これで1を足すという意味になる
if(grv>14):jump=0 // ジャンプの終了(この条件は地面など足場の高さに合わせる方が良いかもしれない)
return;
以下余禄
こういう所では画像ファイルが必要ない形にした方がいいですよ。
ソースだけでは実行確認できませんから。
//celload "yama.jpg",1
buffer 1,640,480,0:color 0,0,255:boxf // 背景
//celload "parts.bmp",2
buffer 2,640,480,0:color 255,0,0:boxf; // 地面
//celload "marioshoki.png",3
buffer 3,46,46,0:color 0,255,0:boxf; // キャラクター
gsel 0;
それと問題は無いのですが
*mainの所のredrawですがゼロではなくアルファベットのオーになっています。
一応全てのソースも入れておきます。
marix=0
mariy=394
grv=0
jump=0 // ジャンプフラグ(0はジャンプしていない 1がジャンプ中)
//celload "yama.jpg",1
buffer 1,640,480,0:color 0,0,255:boxf // 背景
//celload "parts.bmp",2
buffer 2,640,480,0:color 255,0,0:boxf; // 地面
//celload "marioshoki.png",3
buffer 3,46,46,0:color 0,255,0:boxf; // キャラクター
gsel 0;
celdiv 2,40,40
*main
redraw 0 // 0(ゼロ)でなくo(オー)になっていたので修正
gosub*hata1
gosub*hata2
gosub*hata3
redraw 1
await 16
goto*main
*hata1
gmode 0
pos 0,0
celput 1
return
*hata2
x=16:y=12
dim map,x,y
x=0
y=y-1
repeat 16
map(x,y)=9
x=x+1
loop
repeat 12
h=cnt
pos 0,Y*40
repeat 16
n=cnt
gmode 2,40,40
celput 2,map(n,h)
loop
loop
return
*hata3
stick key,15
if key&1:marix=marix-2
if marix<0:marix=0
if key&4:marix=marix+2
if(key&16) {
// ↓この条件が無いと連打したときジャンプ中にもジャンプ(2段ジャンプなど)になってしまう
if(jump==0) {
jump=1 // ジャンプを行なう
grv=-14
}
}
if jump==1:gosub *hata5; // ジャンプ中ならばジャンプ処理へ
goto *hata4
*hata4
pos marix,mariy
gmode 2
celput 3
return
*hata5
mariy+=grv // これでmariyにgrvを足すという意味になる
grv++ // これで1を足すという意味になる
if(grv>14):jump=0 // ジャンプの終了(この条件は地面など足場の高さに合わせる方が良いかもしれない)
return;