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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0402
あいうえお変数に変数を入れる方法8解決


あいうえお

リンク

2012/4/2(Mon) 18:15:28|NO.45709

とても初歩的な質問なのですが…

たとえば、getkeyで1から10までのキーの状態を取得してmesで書き出したいと思います。
自分が考えたソースですと

wait 100 repeat 10 getkey key_(cnt),1+cnt loop repeat 10 mes key_(cnt) loop
となり正常に書き出しもできました。
しかし実際は key_1 のような変数を作りたくて、これでは(cnt)の()の部分も変数として扱われてしまいます。
どのようにすれば良いのでしょうか?



この記事に返信する


TMKL

リンク

2012/4/2(Mon) 18:24:28|NO.45712


key.cnt
で妥協してください



たんす

リンク

2012/4/2(Mon) 18:56:20|NO.45713

「repeat〜loopの外で、個別に扱いたい」というのなら、
mes key_(0)
としてcntを個別で指定することが出来ます。
また、スクリプト上でどうしても”key_1”で書きたいのであれば
#define key_1 key_(0)
とマクロとして置き換えることも可能です。



Cookies

リンク

2012/4/2(Mon) 21:04:30|NO.45727

ひとつ逆に質問してもいいですか。
あいうえおさんは"配列変数"というものをご存知ですか?
わかっているならごめんなさい。変なレスしちゃいました。

変数名にカッコがついちゃう、っていうふうに読み取れなくもなかったので。
まあそれも間違っているってことはないかもしれないんだけど・・・


>しかし実際は key_1 のような変数を作りたくて、
たんすさんのようにマクロにするのもありですが、あれは見かけだけにすぎません。
一番単純なのは

getkey key_0,1+0 getkey key_1,1+1 getkey key_2,1+2 getkey key_3,1+3 getkey key_4,1+4 getkey key_5,1+5 getkey key_6,1+6
と羅列することですね。



KA

リンク

2012/4/3(Tue) 17:34:28|NO.45745

>>しかし実際は key_1 のような変数を作りたくて

変数名を自動で作ることは出来ません。
この場合は2次元配列で妥協しましょう。



cats

リンク

2012/4/3(Tue) 19:15:32|NO.45759

こういうことですか?

dim key,10 repeat redraw 0 await 1 color 255,255,255 :boxf :color 0,0,0 :pos 1,1 repeat 10 getkey key.cnt,1+cnt if key.cnt=1 :mes "反応あり" :else :mes "反応なし" loop redraw 1 loop



あいうえお

リンク

2012/4/3(Tue) 22:44:01|NO.45776

やはりHSPの書き方に従うしかないようですね
key_xと書ければ都合が良かったのですが、難しいようなので妥協しておきます。



ヂオン

リンク

2012/4/4(Wed) 17:45:42|NO.45793

解決しているようですが、一応投稿します。
#enum で 番号に名前をつけてしまう手もあります。


#enum idx_X = 0 #enum idx_Y #enum idx_Z #enum KEYCODEARRAY_ELETOTAL dim key , KEYCODEARRAY_ELETOTAL repeat repeat KEYCODEARRAY_ELETOTAL getkey key.cnt , cnt+'X' loop redraw 0 color 255,255,255 boxf color pos 0,0 mes "x="+key(idx_x) mes "y="+key(idx_y) mes "z="+key(idx_z) redraw await 30 loop



ヂオン

リンク

2012/4/4(Wed) 17:58:26|NO.45794

もしかして変数のポインタの事でしょうか?
それに関しては、dup または dupptr 命令を使用することができます。


#enum idx_X = 0 #enum idx_Y #enum idx_Z #enum KEYCODEARRAY_ELETOTAL dim key , KEYCODEARRAY_ELETOTAL dup key_x , key.idx_x // クローン変数(Pointer変数の様な物)を作成。 dup key_y , key.idx_y dup key_z , key.idx_z repeat repeat KEYCODEARRAY_ELETOTAL getkey key.cnt , cnt+'X' loop redraw 0 color 255,255,255:boxf color:pos 0,0 mes "x="+key_x mes "y="+key_y mes "z="+key_z redraw await 30 loop



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