クラスは命令関数群と同じものを複製する
命令関数の自作の章で、命令関数群を独立したプログラムファイルとして保存し、メインプログラムから実行できるところまで触れました。
命令関数群は、主に共通の関数を網羅して汎用性の高い機能のときに有効活用できます。
クラスは、命令関数群でまとめた#moduleから#globalまでの同じ命令関数群を持つ機能を丸ごと複製します。
キーボードの命令関数群を作る
例えば、キーボードのスペースキー1つについて、以下の機能を作ってみましょう。
・押下状態を最新の状態に更新する(KeyButtonMain)
・押下状態を返す(GetKeyButtonFlag())
・押下または離上中のカウンターを返す(GetKeyButtonHold())
・押下された瞬間だけフラグを上げる(GetKeyButtonDown())
・離上された瞬間だけフラグを上げる(GetKeyButtonUp())
#ifndef __KeyButton__
#define __KeyButton__
/*////////////////////////////////////////////////////////////////////
キーボタン命令関数群
キーボタンの入力をサポートします
////////////////////////////////////////////////////////////////////*/
#module KeyButton
/*////////////////////////////////////////////////////////////////////
定数・マクロ定義
--------------------------------------------------------------------*/
#const _KEYCODE (32) //Spaceキー
/*////////////////////////////////////////////////////////////////////
処理:初期化
概要:キーボタン機能を使えるように初期化します
引数:
戻値:
--------------------------------------------------------------------*/
#deffunc InitKeyButton
dim _flag //押下フラグ(0:離上,1:押下)
dim _hold //押下離上時間
dim _down //押下時フラグ(押した瞬間だけ1)
dim _up //離上時フラグ(離した瞬間だけ1)
return
/*////////////////////////////////////////////////////////////////////
処理:メイン
概要:キーボタンを常に監視し、フラグを更新します
引数:
戻値:
--------------------------------------------------------------------*/
#deffunc KeyButtonMain
getkey _flag,_KEYCODE //_KEYCODE押下中1、離上中0が_flagに代入
if _flag == 1{ //押下中のとき
if _hold <= 0{ //押下離上時間が0以下のとき
_down == 1 //押下時フラグを1にする
_hold = 0 //押下離上時間が0にする
}else{ //そうでないとき
_down == 0 //押下時フラグを0にする
}
_up = 0 //離上時フラグを0にする
_hold++ //押下離上時間をインクリメント(カウントアップ)
}else{ //押下中でないとき
if _hold >= 0{ //押下離上時間が0以上のとき
_up == 1 //離上時フラグを1にする
_hold = 0 //押下離上時間が0にする
}else{ //そうでないとき
_up == 0 //離上時フラグを0にする
}
_down = 0 //押下時フラグを0にする
_hold-- //押下離上時間をデクリメント(カウントダウン)
}
_hold = limit(_hold,-9999,9999) //押下離上時間の最大最小値内にする
return
/*////////////////////////////////////////////////////////////////////
処理:押下状態を返す
概要:押下状態を返します
引数:
戻値:真偽値
--------------------------------------------------------------------*/
#defcfunc GetKeyButtonFlag
return _flag
/*////////////////////////////////////////////////////////////////////
処理:押下時間を返す
概要:押下時間を返します
引数:
戻値:押下時間
--------------------------------------------------------------------*/
#defcfunc GetKeyButtonHold
return _hold
/*////////////////////////////////////////////////////////////////////
処理:押下を返す
概要:押下を返します
引数:
戻値:真偽値
--------------------------------------------------------------------*/
#defcfunc GetKeyButtonDown
return _down
/*////////////////////////////////////////////////////////////////////
処理:離上を返す
概要:離上を返します
引数:
戻値:真偽値
--------------------------------------------------------------------*/
#defcfunc GetKeyButtonUp
return _up
#global
#endif
#include "class_sp1.hsp" //class_sp1.hspを読み込む
InitKeyButton //キーボタン命令関数群の初期化
repeat
KeyButtonMain //キーの押下状態を更新する
cls //画面を白で消す
pos 0,0 //描画位置を左上に設定
mes " 状態=" + GetKeyButtonFlag() //押下フラグを取得して表示
mes " 時間=" + GetKeyButtonHold() //押下離上時間を取得して表示
mes "押下時=" + GetKeyButtonDown() //押下時フラグを取得して表示
mes "離上時=" + GetKeyButtonUp() //離上時フラグを取得して表示
await 1000 / 20 //1秒間に約20回ループするように待つ
loop
上記2つのプログラムをそれぞれ「class_sp1.hsp」「class_mp1.hsp」として同じ場所に保存して実行してみましょう。
Spaceキーを押すと、各項目の値が変化するか確認しましょう。
Spaceキーしか使えませんが、4つの機能は実装できました。次はSpaceキー以外でも同じ処理を使えるように複製していきます。
Copyright © 2002-2025 team.Dakuji All Rights Reserved.