Humi様
有難うございます。
使用キー数は6つの予定です。増えたとしても10程度に収まります。
勉強も兼ねて#uselibと#cfuncを用いたAPI記述に挑戦してみます。
「redrawは描画する空間だけ範囲を指定したらもっと早くなる」
とのことですが、これは
redraw 0〜redraw 1の間には描写関連の記述のみを入れるべき。
という解釈でよろしいでしょうか?
ゲームのシーン単位で分割しており、
計算部分と描写部分はごちゃ混ぜです。
(場所によっては描写関数内で計算させています……。)
分離させるとなると少々面倒なことになりそうです。
画面の変更部分のみを更新した方が早い。
という解釈でしたら画面全体が良く動くゲームなので、
毎フレーム画面全体を更新しなければならない状態です。
「同じ処理はまとめる」「いらんものは出来るだけ排除」
に関しては耳が痛いです。気が付くとごちゃごちゃしたソースになっています。
地道に整理して行くしかありませんかね。
大分趣旨から外れた質問内容になってしまいましたが、
新規書き込みで再質問した方がよろしいでしょうか?
非常に勉強になる返答が多く、
続けさせて頂けるのであれば有難いです。
訂正したサンプルを記述しておきます。
(要素が増えるたびにソースを分割して#include結合していきたい方針)
main.hsp
///////////////////////////////
//外部DLLの指定
#uselib "user32.dll"
#cfunc GetAsyncKeyState "GetAsyncKeyState" int
//メインループ
*MAIN
//一定の時間で待つ
await 16
//計算処理
gosub *INKEY_CALCULATION
//描写処理
redraw 0
color 0,0,0 : boxf
gosub *INKEY_DRAW
redraw 1
goto*MAIN
//別ファイルを結合
#include "inkey.hsp"
///////////////////////////////
inkey.hsp
///////////////////////////////
//変数定義
key_left = 0
key_up = 0
key_right = 0
key_down = 0
*INKEY_CALCULATION
if GetAsyncKeyState(37) & 0x8000 : key_left++ : else : key_left = 0
if GetAsyncKeyState(38) & 0x8000 : key_up++ : else : key_up = 0
if GetAsyncKeyState(39) & 0x8000 : key_right++ : else : key_right = 0
if GetAsyncKeyState(40) & 0x8000 : key_down++ : else : key_down = 0
return
*INKEY_DRAW
color 255,255,255 : pos 0,0
mes key_left
mes key_up
mes key_right
mes key_down
return
///////////////////////////////