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


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
0329
ゆうたんジャンプさせたいが落ちてこない2未解決


ゆうたん

リンク

2018/3/29(Thu) 20:53:17|NO.82865

marix=0
mariy=394
grv=0

celload "yama.jpg",1
celload "parts.bmp",2
celload "marioshoki.png",3
celdiv 2,40,40

*main
redraw 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:grv=-14:goto*hata5
goto *hata4

*hata4
pos marix,mariy
gmode 2
celput 3
return
*hata5
mariy=mariy+grv
grv=grv+1
if grv<0:goto *hata4
goto*hata5

どうすればよいですか
初心者ですよろしくお願い致します



この記事に返信する


あまら

リンク

2018/3/29(Thu) 22:02:21|NO.82867

まず全体を通してですが
このような書き方だと、あとで見た時に「これ何だっけ???」となる事が多いので
タブやコメントを入れることをおススメします。

そして肝心のジャンプに関しては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;



ゆうたん

リンク

2018/3/29(Thu) 22:11:48|NO.82868

ありがとうございます。
色々参考になりました。やってみます。



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