|
|
2014/9/28(Sun) 10:23:02|NO.65290
シナリオの中で使うメタなボタンについて考えてるんですけど
ボタンって押しちゃうと割り込みかかっちゃうじゃないですか
それをchkboxのように割り込みかからず
フラグの変化だけにとどめたいんです
押したか押してないかは
ループの中で調べるかんじで
という動作にすると
シナリオの中にも組み込めるんですよね
ジャンプしちゃうと
シナリオの外に出ちゃうので
|
|
2014/9/28(Sun) 10:28:55|NO.65291
つbutton gosub
|
|
2014/9/28(Sun) 10:36:13|NO.65292
アレです キーワードはラベルを使わずに です
文字列の分岐 をラベル代わりに 使うは大丈夫ぽいです
|
|
2014/9/28(Sun) 10:38:06|NO.65293
gosubもいいんですけど
シナリオの中に帰って来ても
って 考えたりないですか
もうちょっと色々加えたら
フラグの変化だけに使えそうではありますが
|
|
2014/9/28(Sun) 11:12:03|NO.65295
すいません。自己解決しました
結局 button gosub を使ったことがないのが原因です
>でもこんな簡単なことなら、y.tackさんが悩むはずがないですよね...。
割と簡単なことで悩みますよーw
x=1
while 1
my_button ""+x,"sub_main",x:x++
if push_flag==1:_break
my_button ""+x,"sub_main",x:x++
if push_flag==1:_break
my_button ""+x,"sub_main",x:x++
if push_flag==1:_break
my_button ""+x,"sub_main",x:x++
if push_flag==1:_break
my_button ""+x,"sub_main",x:x++
if push_flag==1:_break
my_button ""+x,"sub_main",x:x++
if push_flag==1:_break
my_button ""+x,"sub_main",x:x++
if push_flag==1:_break
my_button ""+x,"sub_main",x:x++
if push_flag==1:_break
my_button ""+x,"sub_main",x:x++
if push_flag==1:_break
my_button ""+x,"sub_main",x:x++
if push_flag==1:_break
button "OK",*mes_OK
_break
wend
pos 100,0
stop
*mes_OK
mes ""+bt_id+" OK"
stop
#deffunc my_button str p_s,str p_sid,int p_n
push_flag=0
if p_n==1: bt_sid_1=p_sid:button gosub p_s,*push_1
if p_n==2: bt_sid_2=p_sid:button gosub p_s,*push_2
if p_n==3: bt_sid_3=p_sid:button gosub p_s,*push_3
if p_n==4: bt_sid_4=p_sid:button gosub p_s,*push_4
if p_n==5: bt_sid_5=p_sid:button gosub p_s,*push_5
if p_n==6: bt_sid_6=p_sid:button gosub p_s,*push_6
if p_n==7: bt_sid_7=p_sid:button gosub p_s,*push_7
if p_n==8: bt_sid_8=p_sid:button gosub p_s,*push_8
if p_n==9: bt_sid_9=p_sid:button gosub p_s,*push_9
if p_n==10: bt_sid_10=p_sid:button gosub p_s,*push_10
return
*push_1: push_flag=1:bt_id=1:bt_sid=bt_sid_1: return
*push_2: push_flag=1:bt_id=2:bt_sid=bt_sid_2: return
*push_3: push_flag=1:bt_id=3:bt_sid=bt_sid_3: return
*push_4: push_flag=1:bt_id=4:bt_sid=bt_sid_4: return
*push_5: push_flag=1:bt_id=5:bt_sid=bt_sid_5: return
*push_6: push_flag=1:bt_id=6:bt_sid=bt_sid_6: return
*push_7: push_flag=1:bt_id=7:bt_sid=bt_sid_7: return
*push_8: push_flag=1:bt_id=8:bt_sid=bt_sid_8: return
*push_9: push_flag=1:bt_id=9:bt_sid=bt_sid_9: return
*push_10: push_flag=1:bt_id=10:bt_sid=bt_sid_10: return
| |
|
2014/9/28(Sun) 12:05:30|NO.65301
コピペが気になった(・ω・)……
#const BUTTONNUM 10
pos 0,0
repeat BUTTONNUM
button gosub ""+(cnt+1),*push
loop
button gosub "OK",*mesok
pos 100,0
stop
*mesok
mes ""+buttonid+" OK"
return
*push
buttonid = stat+1
return
|
|
2014/9/28(Sun) 12:48:27|NO.65303
>割と簡単なことで悩みますよーw
あ〜、そうだったんですか!
サンプル的なコードを突然消してしまってごめんなさい。
実はエディタからのコピー&ペーストでミスって、
ウィンドウ作成部分が抜け落ちていて動かないコードになっていたのと、あのレスでの私の発言の通り、
「y.tackさんならきっと....」と考えていたので、「ん..、もういいや」と思って消してしまいました。
結局はy.tackさんの気付きに繋げることができたみたいでほっとしました。
|
|
2014/9/28(Sun) 13:45:27|NO.65305
button gosub に関して軽くググッてみました
http://hsp.tv/play/pforum.php?mode=pastwch&num=29838
buttonのすぐ後の_breakいらいないんですね
x=1
my_button ""+x,"sub_main",x:x++
my_button ""+x,"sub_main",x:x++
my_button ""+x,"sub_main",x:x++
my_button ""+x,"sub_main",x:x++
my_button ""+x,"sub_main",x:x++
my_button ""+x,"sub_main",x:x++
my_button ""+x,"sub_main",x:x++
my_button ""+x,"sub_main",x:x++
my_button ""+x,"sub_main",x:x++
my_button ""+x,"sub_main",x:x++
mes "abc"
pos 100,0
while 1
await 50
if bt_id!=0:mes ""+bt_id:bt_id=0
wend
stop
*mes_OK
mes ""+bt_id+" OK"
stop
#deffunc my_button str p_s,str p_sid,int p_n
if p_n==1: bt_sid_1=p_sid:button gosub p_s,*push_1
if p_n==2: bt_sid_2=p_sid:button gosub p_s,*push_2
if p_n==3: bt_sid_3=p_sid:button gosub p_s,*push_3
if p_n==4: bt_sid_4=p_sid:button gosub p_s,*push_4
if p_n==5: bt_sid_5=p_sid:button gosub p_s,*push_5
if p_n==6: bt_sid_6=p_sid:button gosub p_s,*push_6
if p_n==7: bt_sid_7=p_sid:button gosub p_s,*push_7
if p_n==8: bt_sid_8=p_sid:button gosub p_s,*push_8
if p_n==9: bt_sid_9=p_sid:button gosub p_s,*push_9
if p_n==10: bt_sid_10=p_sid:button gosub p_s,*push_10
return
*push_1: bt_id=1:bt_sid=bt_sid_1: return
*push_2: bt_id=2:bt_sid=bt_sid_2: return
*push_3: bt_id=3:bt_sid=bt_sid_3: return
*push_4: bt_id=4:bt_sid=bt_sid_4: return
*push_5: bt_id=5:bt_sid=bt_sid_5: return
*push_6: bt_id=6:bt_sid=bt_sid_6: return
*push_7: bt_id=7:bt_sid=bt_sid_7: return
*push_8: bt_id=8:bt_sid=bt_sid_8: return
*push_9: bt_id=9:bt_sid=bt_sid_9: return
*push_10: bt_id=10:bt_sid=bt_sid_10: return
相変わらずコピペばかりで申し訳ない
>サンプル的なコードを突然消してしまってごめんなさい。
軽く眺めた程度ですので
処理 追っかけて読んでなかったので
せっかくなので 改めてちゃんと読んでみたい
かんじも割とします
| |
|
2014/9/28(Sun) 15:54:18|NO.65308
消してしまったサンプルではないですが、y.tackさんが示された処理ならこんな風↓にも書けると思います。
screen 0,640,480,0
#define num_btn 10 ;ボタンの数
#define with_btn 80
#define height_btn 20
flg_btn_clicked = 0 ;ボタン押し下げフラグ。どれか一つでも押されたら直ちに1になる。
;< ボタン作り >
pos 0,0
repeat num_btn
button gosub ""+str(cnt+1)+"",*Interrupt_btn_scr0
loop
pos 100,0
repeat
;/*▼--------------------▼*/
; ループの仕事
;/*▲--------------------▲*/
if flg_btn_clicked { ;どれか一つでも押されていたら
mes btn_id_pushed + 1
flg_btn_clicked = 0 ;フラグを観測し終わったら 0 に戻しておく
}
await 100
loop
stop
*Interrupt_btn_scr0
flg_btn_clicked = 1
btn_id_pushed = stat ;押されたボタンのオブジェクトIDを代入
return
ボタンによる割り込みが入るとstatに押されたボタンのオブジェクトIDが格納されるので、
ボタンごとにラベルを用意しなくても一つのラベルにジャンプを集中させれば対応できます。
|
|
2014/9/28(Sun) 17:59:19|NO.65317
解決の返信 削除しちゃったかな?
解決♪
|
|
2014/9/28(Sun) 20:14:41|NO.65321
なんかHSPの命令を似たようなかんじで
ラップして擬似的に呼べるような気がしたので
#module func
#deffunc func_init
p1=0
p2=0
p3=0
p4=0
r1=0
return
;< ボタン作り >相当
#deffunc do_func str p_s
if p_s=="pos":gosub *func01@
if p_s=="mes":gosub *func02@
return
#deffunc set_func_p1 var p_v
func_p1=p_v
return
#global
goto *@f
*func01:pos x,0:x+=50:return
*func02:mes p1@func:return
*@
x=0
p1@func=0
;擬似コード
do_func "pos"
p1@func="A"
do_func "mes"
do_func "pos"
p1@func="B"
do_func "mes"
do_func "pos"
p1@func="C"
do_func "mes"
do_func "pos"
p1@func="D"
do_func "mes"
stop
|
|