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


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0928
y.tackメタなボタン10解決


y.tack

リンク

2014/9/28(Sun) 10:23:02|NO.65290

シナリオの中で使うメタなボタンについて考えてるんですけど
ボタンって押しちゃうと割り込みかかっちゃうじゃないですか

それをchkboxのように割り込みかからず
フラグの変化だけにとどめたいんです

押したか押してないかは
ループの中で調べるかんじで

という動作にすると
シナリオの中にも組み込めるんですよね

ジャンプしちゃうと
シナリオの外に出ちゃうので



この記事に返信する


Flat

リンク

2014/9/28(Sun) 10:28:55|NO.65291

つbutton gosub



y.tack

リンク

2014/9/28(Sun) 10:36:13|NO.65292

アレです キーワードはラベルを使わずに です
文字列の分岐 をラベル代わりに 使うは大丈夫ぽいです



y.tack

リンク

2014/9/28(Sun) 10:38:06|NO.65293

gosubもいいんですけど
シナリオの中に帰って来ても
って 考えたりないですか
もうちょっと色々加えたら
フラグの変化だけに使えそうではありますが



y.tack

リンク

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



KOMARI

リンク

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



FunnyMaker

リンク

2014/9/28(Sun) 12:48:27|NO.65303

>割と簡単なことで悩みますよーw

あ〜、そうだったんですか!
サンプル的なコードを突然消してしまってごめんなさい。
実はエディタからのコピー&ペーストでミスって、
ウィンドウ作成部分が抜け落ちていて動かないコードになっていたのと、あのレスでの私の発言の通り、
「y.tackさんならきっと....」と考えていたので、「ん..、もういいや」と思って消してしまいました。

結局は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
相変わらずコピペばかりで申し訳ない

>サンプル的なコードを突然消してしまってごめんなさい。
軽く眺めた程度ですので
処理 追っかけて読んでなかったので
せっかくなので 改めてちゃんと読んでみたい
かんじも割とします



FunnyMaker

リンク

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が格納されるので、
ボタンごとにラベルを用意しなくても一つのラベルにジャンプを集中させれば対応できます。



y.tack

リンク

2014/9/28(Sun) 17:59:19|NO.65317

解決の返信 削除しちゃったかな?

解決♪



y.tack

リンク

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



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