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


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0607
zezenanagetkey命令ヘルプ(HDL)の記載について0解決


zezenana

リンク

2022/6/7(Tue) 13:06:41|NO.96590

getkey命令のヘルプについて、原文を作成された方には申し訳ないのですが
以下の懸念事項により改訂してはどうでしょうか?

(getkey命令を調査した結果をもとに、再投稿しました)


-----
●キー入力系の stick命令ヘルプ内容と比べると解説が少ない

●getkey命令の使用例がなく、掲載のサンプルは使用例ではない

●仮想キーコード表が主要なものしか掲載されていない

●仮想キーコード表の内容に PC98のキー互換性の記述がある

HSP開発初期には PC-9801は必要な情報だったのかも知れませんが、
現在ではPC98のキーや配置など人によっては分からない気がします。

HDL内の「PC98」を検索すると aplkey命令にも同じ記述が存在します。

●キーコード取得サンプルの存在について

掲載サンプルは onkey/onclick命令によるキーマウス入力の使用例であるため
getkeyを調べている初心者にはややこしく、難しいです。

表示される値は onkey/onclick命令のパラメータ値であり、
getkeyの p2値(仮想キーコード)とも異なっています。

過去に指摘もされています。
http://hsp.tv/play/pforum.php?mode=pastwch&num=89331
onkeyのキーコード299について

サンプルの title記述に顔文字「(^^)v」があるため、
HSPの正式ヘルプの印象が変わってしまいます。


-----
改訂する内容の提案としては以下となります。

初心者向けに考えると解説と仮想キーコード表、注意点のみ
必要最低限の記載でも良いと思います。


●詳細な解説や注意点の追加

1つのキーやボタンに対しでオンオフを返すだけに見えますが、
stick命令との差異や仮想キーコード(p2)についての注意点などがあります。

●仮想キーコード表(p2値)の作成

主要部のみ掲載はヘルプとして不十分なので標準日本語キーボードの範囲で構わないので
仮想キーコードを全て載せます。

これについては aplkey命令ヘルプの仮想キーコード表も同様です。

参考資料:
https://docs.microsoft.com/ja-jp/windows/win32/inputdev/virtual-key-codes
仮想キーコード (Winuser.h) - Win32 apps - Microsoft Docs

●stick命令と異なる点

どちらも GetAsyncKeyStateを利用した命令ですが、処理に差異があります。

アクティブウィンドウに関係なくキー入力を受け付けること※
getkeyは他のウィンドウ操作時やバックグラウンドでもキー入力処理されます。

※stick命令には p3オプションにてウィンドウアクティブチェックがある

キー入力はリピートするので押した瞬間のみ取得する場合には
トリガー処理を行う必要があること。

stick命令にはトリガータイプ判定が実装されています。

これについては過去にも要望があったようです。
http://hsp.tv/play/pforum.php?mode=pastwch&num=3731

●現状のキー取得サンプルの削除と getkey使用例の作成

onkey/onclick命令を利用したサンプルをを除外し、
すべて getkey命令を利用して対応します。

使用方法の例:

*main getkey key_w,87:getkey key_s,83 getkey key_a,65:getkey key_d,68 ; 左クリックはトリガー処理を行う getkey key,1:if key=0:key_lc=0:else:if key_lc<2:key_lc++ if ginfo_cy>=ginfo_sy:cls if key_w=1:mes "[W]",1 if key_s=1:mes "[S]",1 if key_a=1:mes "[A]",1 if key_d=1:mes "[D]",1 if key_lc=1:mes "[LClick]",1 if key_w=1|key_a=1|key_s=1|key_d=1|key_lc=1:mes "":pos 0 wait 10:goto *main

全キー取得の例:

*main cls ; 同時押し数はキーボード性能や接続数による(修飾キーを除く) repeat 256 getkey vkcd,cnt:if vkcd=1:mes "p2=["+cnt+"]" loop wait 10:goto *main

●仮想キーコード p2値についての説明

修飾キーには複数の仮想キーコードで取得できるものがある
(左右共通・左右個別による Shift、Ctrl、Alt、Windowsキー)

修飾キーによって仮想キーコードが変化するものがある
(Ctrl+Break、Ctrl+Scroll Lockなど)

一部の OEMキーはオンオフ状態ではなくモードを返す
(Caps Lock/漢字、半角全角、カタカナ/ひらがな、ズームなど)

●Alt、F10キーがウィンドウの操作に使用されることについて

以下については HSP側の問題なのか分からないのですが、
一部のキーを押すことで隠れたメニューバーに遷移します。
Enterキーにてメニュー表示、再入力やESCキーにて解除されます。

キー入力が停止するのでフォーカスが遷移しているみたいです。
HSPの仕様であればそれについての記述が必要です。

●キーボードの「ロールオーバー」について

ゲーム系開発をする人もいるので同時キー入力数制限の説明があれば便利かもしれません。

一般的な USBキーボード1接続の場合は3から4キー+修飾キー8つとなりますので、
十字キー操作2つ使用のゲームや複数人でプレイするゲームなどは
キーボード操作ではなくジョイスティック操作を検討すべきなど


-----
キー入力系はユーザなら必ず見るヘルプのような気がしたので提案してみました。
他の命令ヘルプの記述については特にチェックしていません。

HSP開発初期を理解していないので、発言内容に不備がある場合や、
余計なことを提案しているなど、ありましたらご指摘願います。



この記事に返信する


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