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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0821
ピヨ彦色付きボタンを命令化してみたいのですが、どのようにして指定ラベルへ飛ばせばよいのかわかりません。8解決


ピヨ彦

リンク

2015/8/21(Fri) 01:20:03|NO.70963

題名通りです。HSPを初めて1ヶ月です。
赤色のボタンを作ってみようかなーと思い、ここまで発展しました。
buttonのようにラベルを指定させる方法がわかりません。(説明下手ですいません)
現在はボタンを押すとストップするようにしてあります。
これを、クリックすることで任意のラベルに飛ぶようにしたいのです。
よろしくおねがいします。

以下コードです。
スマホからのため、読みにくいかもしれませんが💦



#module #deffunc ColorRedButton int ,p1 ,int p2 ,int p3 ,int p4 repeat mx = mousex my = mousey color 255 ,0 ,0 boxf p1 ,p2 ,p3 ,p4 stick key //キー検出 if (mx >= 0 && mx <= 100 && my >=0 && my <=100){ //判定 color 255 ,100 ,100 //カーソルがボタンに触れた時、色が薄くなるようにします。 boxf p1 ,p2 ,p3 ,p4 if (key == 256){ stop //今はクリックで止まるようしてあります。 } } await 100 loop return #global ColorRedButton 0 ,0 ,100 ,100



この記事に返信する


kanahiron

リンク

2015/8/21(Fri) 01:44:55|NO.70964

指定のラベルへとジャンプする「goto」 、サブルーチンジャンプする「gosub」という命令がありますよ



kanamaru

リンク

2015/8/21(Fri) 07:17:10|NO.70965

水を注すようですいません。objimageを使えばいいのでは?



窓月らら

リンク

2015/8/21(Fri) 07:58:48|NO.70966

objimage を使ったほうが楽だと思いますが、
例えば hsp3dish なんかだと独自で書いてしまったほうが自由度も高いので
以下は考え方の参考としてください。

#module #deffunc ColorRedButton int p1 ,int p2 ,int p3 ,int p4 ;repeat mx = mousex my = mousey color 255 ,0 ,0 boxf p1 ,p2 ,p3 ,p4 stick key //キー検出 click=0 if (mx >= 0 && mx <= 100 && my >=0 && my <=100){ //判定 color 255 ,100 ,100 //カーソルがボタンに触れた時、色が薄くなるようにします。 boxf p1 ,p2 ,p3 ,p4 if (key == 256){ click=1 ;stop //今はクリックで止まるようしてあります。 } } ;await 100 ;loop return click // クリックの状態をstatで返す #global // ループはこちらでやったほうがいい repeat ColorRedButton 0 ,0 ,100 ,100 // クリックされるとstatに 1 が返る if stat=1 { dialog "クリック!" } await 100 loop



ピヨ彦

リンク

2015/8/21(Fri) 08:03:54|NO.70967

>kanahironさん
ご意見ありがとうございます。
もちろんそれは知っているのですが、それをどう使えばいいのかな、と。
そんな感じです💦



ピヨ彦

リンク

2015/8/21(Fri) 08:05:35|NO.70968

>kanamaruさん

まさかそれを使えば…赤に…?



ピヨ彦

リンク

2015/8/21(Fri) 08:07:20|NO.70969

>窓月ららさん
ご意見、サンプル、ありがとうございます。
なぜループは外でやったほうがいいのでしょう??💦



窓月らら

リンク

2015/8/21(Fri) 08:34:12|NO.70970

ColorRedButton という命令内でループさせてしまうと汎用性が無くなってしまうため。
この命令が「何かクリックされるまで他の処理を一切しない」という用途に限定するなら
命令内でループさせてもいいのですが、
「ボタンの状態を見ながら他の処理もする」という用途で使えなくなってしまいます。
更に、この命令を使って「複数のボタンを配置する」場合も不都合ですよね。

以下、ちょっと書き換えさせて頂きました(複数ボタン対応)。

#module #deffunc ColorRedButton int _x1, int _y1, int _x2, int _y2 mx=mousex my=mousey getkey key,1 // キー検出(左クリック) click=0 // 0をセットしておく if mx>=_x1 & mx<=_x2 & my>=_y1 & my<=_y2 { //判定 if key { click=1 } // クリックならフラグを立てる color 255,100,100 } else { color 255,0,0 } boxf _x1,_y1,_x2,_y2 // ボックスを描画 return click // クリックの状態をstatで返す #global // ループ repeat redraw 0 ColorRedButton 0,0,100,100 if stat=1 { dialog "ボタン1をクリック!" } ColorRedButton 200,0,300,100 if stat=1 { dialog "ボタン2をクリック!" } redraw 1 await 16 loop



ピヨ彦

リンク

2015/8/21(Fri) 08:42:17|NO.70971

>窓月ららさん

なるほど、たしかにそちらの方が使い勝手は良さそうですね。

またもサンプルありがとうございますm(._.)m
自分のコードの無駄の多さがよくわかります💦

この考え方を元に、自分の中でさらに改良してみたいと思います。

みなさま、ご回答をありがとうございました。



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