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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0926
ダメっす!このプログラムの進行順 return3解決


ダメっす!

リンク

2012/9/26(Wed) 00:39:20|NO.49575

この一部のプログラムの進みかたがわかんなくなってしまいました。

gosub *MoveChara
gosub *MoveCamera
    gosub *chkconf
    と
    returnのところです。

いったいどうやって進んでいるのか疑問に思って質問しました。
通常は↑から↓に続いて順々に進んでいます。



このプログラムの場合
gosub *MoveChara リターン gosub次の文に戻ると思うんですが、
そのgosub *MoveCharaの下の文プログラムは進まず、そしてエラーに
なるんじゃないんでしょうか?


そこのあたりがわかんないので教えていただきたいです。





*実行

//keybuf変数はメインループの外で
//dim,keybuf,256として、
//確保しておいてください。
E3DGetKeyboardCnt keybuf
if keybuf( VK_ESCAPE ) !=0 : goto *終了

gosub *MoveChara
gosub *MoveCamera

E3DBeginScene scid1
E3DChkInView scid1,hsid0
E3DChkInView scid1,hsid1
gosub *chkconf

//不透明部分を描画する
E3DRender scid1, hsid0, 0
E3DRender scid1, hsid1, 0
//半透明部分の描画をする
E3DRender scid1, hsid0, 1,0,0,0,0,1
E3DRender scid1, hsid1, 1,0,0,0,0,1
E3DEndScene
E3DPresent scid1

E3DWaitbyFPS 60, chkfps1
await 0
goto *実行

*終了
end

*MoveChara
eventno = 0
if keybuf( VK_UP ) != 0 : E3DPosForward hsid1, 100.0 : eventno = 1;矢印↑
if keybuf( VK_DOWN ) != 0 : E3DPosForward hsid1, -100.0 : eventno = 1;矢印↑
if keybuf( VK_LEFT ) != 0 : E3DRotateY hsid1, -50.0 : eventno = 1;矢印←
if keybuf( VK_LEFT ) != 0 : E3DRotateY hsid1, 50.0 : eventno = 1;矢印→
E3DSetNewPoseByMOA hsid1, eventno
return


*ChkConf
E3DChkConfGround hsid0, hsid0, 1, 200, -100, result0, adjustx0, adjusty0, adjustz0, nx0, ny0, nz0
if ( result0 !=0 ) : E3DSetPos hsid1, adjustx0,adjusty0,adjustz0
return



*MoveCamera
E3DGetPos hsid1, saveposx1, saveposy1, saveposz1
E3DPosForward hsid1, -2500.0
E3DGetPos hsid1, backposx, backposy, backposz
E3DSetPos hsid1, saveposx1, saveposy1, saveposz1

E3DSetCameraPos backposx + -4000, backposy + 2000.0, backposz
E3DSetCameraTarget saveposx1, saveposy1 + 800.0, saveposz1, 0.0, 1.0, 0.0
return



この記事に返信する


@key

リンク

2012/9/26(Wed) 01:10:07|NO.49576

gotoは指定したラベルに実行する行をとばす命令
gosubは基本的にgotoと同じだけど飛ばした後にreturn命令があったらこのgosubがあるところへ戻る命令



ヂオン

リンク

2012/9/26(Wed) 06:32:57|NO.49581

gosub *ラベル名 の次のポイントから再開されるのが基本です。

要するに

dialog"区画0":gosub *ラベル名:mes "区画1":print"区画2"
上のスクリプトでは mes"区画1"の区画に制御が返ります。

hspでは 改行 または : で処理の区画分けを行っているようです。
間違っても gosub *ラベル名 の区画に制御が返ることはないはずです。



ダメっす!

リンク

2012/9/28(Fri) 23:43:25|NO.49619

それなりに解決しました。



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