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


HSPTV!掲示板


未解決 解決 停止 削除要請

2015
0823
空気Button命令で*ラベル名+cntは不可能なのでしょうか?9解決


空気

リンク

2015/8/23(Sun) 23:52:16|NO.71012

button命令でcntを使いたいのですが、エラーが出て使う事が出来ません。
そのような事は不可能なのでしょうか?
repeat 4,1
button gosub "name","*label_"+cnt;文字系で囲わなくても、エラーが出ます。 loop *label_1 ;省略 return *label_2 ;省略 return *label_3 ;省略 return *label_4 ;省略 return



この記事に返信する


tds12

リンク

2015/8/24(Mon) 00:15:28|NO.71013

このような方法ならあります。

labels = *label_1,*label_2,*label_3,*label_4 repeat 4 button gosub "name",labels(cnt) loop stop *label_1 dialog "1省略" return *label_2 dialog "2省略" return *label_3 dialog "3省略" return *label_4 dialog "4省略" return



空気

リンク

2015/8/24(Mon) 00:21:38|NO.71014

早急な返答、ありがとうございます。
参考になりました。



空気

リンク

2015/8/24(Mon) 00:25:31|NO.71015

例えば、ジャンプ先がこのような記述だった場合に
ジャンプ先記述の短縮は可能でしょうか?
*label_1
X(1) = 1 return *label_2 X(2) = 1 return *label_3 X(3) = 1 return *label_4 X(4) = 1 return



窓月らら

リンク

2015/8/24(Mon) 02:33:21|NO.71019

ボタンが押された直後に、オブジェクトid が stat に入ります。
これを判定に利用するのも1つの方法です。

button gosub "Button 1",*jump button gosub "Button 2",*jump button gosub "Button 3",*jump stop *jump dialog "stat="+stat return



kanamaru

リンク

2015/8/24(Mon) 08:17:47|NO.71023

ラベル型配列を使うことでラベルの指定方法はまとまったようですが、
このような方法はどうでしょうか?

#define ctype labels(%1) *label_%1 goto labels(1) stop *label_1 dialog "test"



KOMARI

リンク

2015/8/24(Mon) 09:47:45|NO.71024

>>例えば、ジャンプ先がこのような記述だった場合に
>>ジャンプ先記述の短縮は可能でしょうか?

可能です。全て同じラベルを使います。


#const BUTTONNUM 4 //設置するボタンの数 dim buttonid,BUTTONNUM //各ボタンのオブジェクトIDの入れ物 //いちいちbuttonidにstat("今回は"直前においたオブジェクトIDを指す)を代入する必要は、 //今回に限ってはないっちゃない。 //buttonを連続しておかない場合、オブジェクトIDがずれる可能性があるよって意味で書いた。 //試しに、間に他のbuttonやinput等のオブジェクトを入れてみれば、IDがずれるとわかる。 repeat BUTTONNUM button "button"+(cnt+1),*btn buttonid(cnt) = stat loop stop *btn btnid = stat //実はボタンでラベルに飛ぶとstatにオブジェクトIDが入る pushid = -1 //押されたボタンの"番号"の入れ物 repeat BUTTONNUM if ( buttonid(cnt) == btnid ) { pushid = cnt+1 break } loop if ( pushid == -1 ) { mes "そのbuttonは登録されてないので認識できません!" }else{ mes "押したのはbutton"+pushid+"ですね!" } stop

これを参考にすれば、すぐにやり方がわかるかと(・ω・)



空気

リンク

2015/8/24(Mon) 23:16:23|NO.71043

窓月ららさん>
オブジェクトidがstatに入る事については理解していましたが、
上手く活用するに至りませんでした。
参考になりました。

kanamaruさん>
返答ありがとうございます。参考になりました。
そちらの方がより記述を短縮出来そうですね。
マクロは難しそうですが、ヘルプ等を見ながら
理解しようと思ったのですが、
labels(%1)が新規マクロ名で、*label_%1が実際の中身
labels(%1)の%1はRND()のように()の中に数字を入れて、
その数字がマクロの*label_%1の%1に代入される。
1は何も入力しない場合の初期値という認識でよろしいでしょうか?

KOMARIさん>
参考になりました。返答ありがとうございます。
ボタンを作成したときのIDを配列に記憶して、
ジャンプ先では
押された時のIDと配列のIDが合致するまでループで捜索し、
合致した時のループ回数+1をpushidに代入して、
それをmesで文章とpushidを繋げて表示しているという
理解で問題ないでしょうか?



kanamaru

リンク

2015/8/25(Tue) 07:03:15|NO.71050

1は初期値ではありません。
それは引数付きマクロの記述で、%1~%8が使えます。
初期値を設定したい時は、カッコの中に%1=1などと記述すると設定できます。
hsp 引数付きマクロ
で検索してみてください。



KOMARI

リンク

2015/8/26(Wed) 00:03:04|NO.71064

>>参考になりました。返答ありがとうございます。
>>ボタンを作成したときのIDを配列に記憶して、
>>ジャンプ先では
>>押された時のIDと配列のIDが合致するまでループで捜索し、
>>合致した時のループ回数+1をpushidに代入して、
>>それをmesで文章とpushidを繋げて表示しているという
>>理解で問題ないでしょうか?

はい、問題ないです。
+1をしているのは、ボタン番号を0からではなく1からにしたかっただけです。
ラベル先のstatを使いX(stat)=1とすればお望みのことはできると思います。
また、ソースを発展させた際には飛び先のラベルをひとつにまとめ、statで分岐することでラベルの乱立を防ぎ、すっきり書くこともできると思います。
静的(予め置く個数が決まっている)に置く場合は、使うオブジェクトID番号を決めてしまえば、ここまで丁寧に管理する必要はないです。
repeatなどで動的("特定の変数"個置く場合など)に置きたい場合は私が書いたように、ラベルの代わりにオブジェクト番号をしっかりと管理しておけば大丈夫です。



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