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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
0629
tentungetkeyの使い方3解決


tentun

リンク

2012/6/29(Fri) 11:36:33|NO.47424

毎回初歩的な質問で申し訳ありません。

下記のスクリプトのように、
getkeyで入力されたキーに応じた動作をさせたいのですが、
なぜか実行してキーを押下しても反応してくれません。

特にエラーにもならないし、
記述の場所や仕方などいろいろ調べたり、
私なりに考えたのですが、分かりません。

解明といったら大げさですが、原因を教えて頂きたいです。
よろしくお願いいたします。


dim buf,data sdim mbuf ,256 ,81 dim objno , 81 screen 0,520,700 objmode 2 color 128,128,128 : boxf ;背景色 ;入力ボックス font "MS UI Gothic" , 30 , 1 #const a 53 ; a:間隔 dim num, 81 repeat 81 pos 20 + (cnt\9) * a, 50 + (cnt/9) * a num(cnt)="" input num(cnt), 50, 50, 1 objno(cnt) = stat : loop getkey key,56 getkey key,104 if key=1 : mes "8が入力されました。" stop



この記事に返信する


ken2

リンク

2012/6/29(Fri) 11:57:33|NO.47425

あなたがTestのためにkeyを押そうとする時プログラムはどこを実行していると思いますか?



玄冬

リンク

2012/6/29(Fri) 12:22:49|NO.47426

プログラムの基本的な考え方の問題ですが
プログラムは上の行から1行ずつコンマ何秒という短い時間で
実行されていきます。

そして、実行された行はrepeatなどで
繰り返すように指示しない限り
二度と実行されません

getkeyは、書かれた行が実行されたときに、キーが押されたかを調べる命令であり
それ以外のタイミングでキーが押されても関知しません。
さらに言うなら、最後のifもstopの行の後に、
遡って条件分岐をすることはありません。

キーボードが押されたときに、何かをしたいのであれば
onkeyを使うのが一般的です。


onkey *test stop *test if iparam = 56 : mes "8が入力されました。" ;if wparam = 56 | wparam = 104 : mes "8が入力されました。"
onkeyの詳しい説明はヘルプを読んでもらうとして、
wparamは何のキーが押されたかなので、テンキーとメインで値が異なりますが、
iparamは何の文字が押されたのかなので、テンキーとメインで値が同一です。
8が押されたかを判別するだけならiparamで十分でしょう。

あと直接、関係ないですが下の部分について

getkey key,56 getkey key,104
前にも申しましたが、変数は代入されると前の値は破棄されるので、

1行目で→ 56のキーが押されていれば1押されていなければ0を代入
2行目で→104のキーが押されていれば1押されていなければ0を代入

としていては、結局、メインキーボードの入力は判定時には破棄されることになりますね。
重ねて申し上げますが、keyという変数ひとつで複数のキーの入力を管理することはできません。
調べるキーと同じだけの変数が必要になります。

iparamやwparamは複数キーの同時押しには対応していないので
onkey+getkeyという組み合わせが必要になることもあるかと思います。
覚えておいて頂けると幸いです。



tentun

リンク

2012/6/29(Fri) 15:55:26|NO.47429

ken2さん
プログラムの基本について改めて考えさせられました。
ありがとうございました。

玄冬さん
プログラムの基本的なことから教えていただきありがとうございます。
基本からもっといろんな命令とその適切な使い方を勉強しないとですね。

これでまた次のやりたいことに取り組みます!
なんとか自力で頑張ります!
ですがもうパンクしそうです…



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