HOME > プログラミング > クラス > クラスの作成

#modinit #modterm #modfunc #modcfuncクラス クラスの作成

 

命令関数群をクラスにする
機能を設計する段階では、Spaceキーしか機能しない命令関数群でした。
ここからは、Spaceキー以外にも同じ機能が使えるように機能を複製できるようにします。
機能を設計した「class_sp1.hsp」を改変していきます。


 

複製される機能で使う変数の列挙
機能内で使う変数名を網羅します。
#module 変数名1,変数名2,変数名3...

キーボタンの命令関数群(class_sp2.hsp)
#ifndef __KeyButton__
#define __KeyButton__

/*////////////////////////////////////////////////////////////////////
キーボタンクラス
キーボタンの入力をサポートします
////////////////////////////////////////////////////////////////////*/
#module KeyButton _keycode, _flag, _hold, _down, _up


#global
#endif


 

複製される機能の初期化
機能の変数宣言と複製時の初期値を設定する処理を書きます。
例えば、Spaceキーと同じ機能を他のキーでも使いたいとき、キーコードだけを違うものに変えれば実現できます。
この処理は、メインプログラムからnewmodをした時に呼び出されます。
#modinit 引数の型1 引数名1,引数の型2 引数名2...

キーボタンの命令関数群(class_sp2.hsp)
/*////////////////////////////////////////////////////////////////////
処理:初期化
概要:キーボタン機能を使えるように初期化します
引数:新規キーボタン名,キーコード
戻値:
--------------------------------------------------------------------*/
#modinit int keycode
	dim _keycode	//キーコード
	_keycode = keycode	//※命令関数群はこのキーコードで動く
	dim _flag	//押下フラグ(0:離上,1:押下)
	dim _hold	//押下離上時間
	dim _down	//押下時フラグ(押した瞬間だけ1)
	dim _up	//離上時フラグ(離した瞬間だけ1)
return

引数にキーコードを指定して_keycodeに控えています。
メインプログラムからnewmodで複製時にキーコードが指定されることで、指定キーコード用の機能が作成されます。


 

複製される機能の命令
複製される機能の共通命令処理を書きます。
例えば、キー入力状態のフラグやデータを更新する処理や、機能の中のデータを書き換えたりする処理です。
#modfunc 新しい命令名 引数の型1 引数名1,引数の型2 引数名2...

キーボタンの命令関数群(class_sp2.hsp)
/*////////////////////////////////////////////////////////////////////
処理:メイン
概要:キーボタンを常に監視し、フラグを更新します
引数:キーボタン名
戻値:
--------------------------------------------------------------------*/
#modfunc 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


 

複製される機能の関数
複製される機能の共通関数処理を書きます。
例えば、キー押下状態の取得や、キーが押された瞬間のフラグ値を返す処理です。
#modcfunc 新しい関数名 引数の型1 引数名1,引数の型2 引数名2...

キーボタンの命令関数群(class_sp2.hsp)
/*////////////////////////////////////////////////////////////////////
処理:押下状態を返す
概要:押下状態を返します
引数:キーボタン名
戻値:真偽値
--------------------------------------------------------------------*/
#modcfunc GetKeyButtonFlag
return _flag

/*////////////////////////////////////////////////////////////////////
処理:押下時間を返す
概要:押下時間を返します
引数:キーボタン名
戻値:押下時間
--------------------------------------------------------------------*/
#modcfunc GetKeyButtonHold
return _hold

/*////////////////////////////////////////////////////////////////////
処理:押下を返す
概要:押下を返します
引数:キーボタン名
戻値:真偽値
--------------------------------------------------------------------*/
#modcfunc GetKeyButtonDown
return _down

/*////////////////////////////////////////////////////////////////////
処理:離上を返す
概要:離上を返します
引数:キーボタン名
戻値:真偽値
--------------------------------------------------------------------*/
#modcfunc GetKeyButtonUp
return _up


 

複製された機能の削除
複製された機能を使わなくなった時の処理を書きます。
基本的には初期状態に変数を戻して安全に削除する処理です。
#modterm 引数の型1 引数名1,引数の型2 引数名2...

キーボタンの命令関数群(class_sp2.hsp)
/*////////////////////////////////////////////////////////////////////
処理:停止
概要:キーボタン機能を停止します
引数:キーボタン名
戻値:
--------------------------------------------------------------------*/
#modterm
	_keycode = 0	//キーコード
	_flag = 0	//押下フラグ(0:離上,1:押下)
	_hold = 0	//押下離上時間
	_down = 0	//押下時フラグ(押した瞬間だけ1)
	_up = 0	//離上時フラグ(離した瞬間だけ1)
return


 

変更点の全容
上記の全説明より作成できる「class_sp1.hsp」と同等のプログラムを見てみましょう。

キーボタンの命令関数群(class_sp2.hsp)
#ifndef __KeyButton__
#define __KeyButton__

/*////////////////////////////////////////////////////////////////////
キーボタンクラス
キーボタンの入力をサポートします
////////////////////////////////////////////////////////////////////*/
#module KeyButton _keycode, _flag, _hold, _down, _up


/*////////////////////////////////////////////////////////////////////
処理:初期化
概要:キーボタン機能を使えるように初期化します
引数:新規キーボタン名,キーコード
戻値:
--------------------------------------------------------------------*/
#modinit int keycode
	dim _keycode	//キーコード
	_keycode = keycode	//※命令関数群はこのキーコードで動く
	dim _flag	//押下フラグ(0:離上,1:押下)
	dim _hold	//押下離上時間
	dim _down	//押下時フラグ(押した瞬間だけ1)
	dim _up	//離上時フラグ(離した瞬間だけ1)
return

/*////////////////////////////////////////////////////////////////////
処理:メイン
概要:キーボタンを常に監視し、フラグを更新します
引数:キーボタン名
戻値:
--------------------------------------------------------------------*/
#modfunc 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

/*////////////////////////////////////////////////////////////////////
処理:停止
概要:キーボタン機能を停止します
引数:キーボタン名
戻値:
--------------------------------------------------------------------*/
#modterm
	_keycode = 0	//キーコード
	_flag = 0	//押下フラグ(0:離上,1:押下)
	_hold = 0	//押下離上時間
	_down = 0	//押下時フラグ(押した瞬間だけ1)
	_up = 0	//離上時フラグ(離した瞬間だけ1)
return

/*////////////////////////////////////////////////////////////////////
処理:押下状態を返す
概要:押下状態を返します
引数:キーボタン名
戻値:真偽値
--------------------------------------------------------------------*/
#modcfunc GetKeyButtonFlag
return _flag

/*////////////////////////////////////////////////////////////////////
処理:押下時間を返す
概要:押下時間を返します
引数:キーボタン名
戻値:押下時間
--------------------------------------------------------------------*/
#modcfunc GetKeyButtonHold
return _hold

/*////////////////////////////////////////////////////////////////////
処理:押下を返す
概要:押下を返します
引数:キーボタン名
戻値:真偽値
--------------------------------------------------------------------*/
#modcfunc GetKeyButtonDown
return _down

/*////////////////////////////////////////////////////////////////////
処理:離上を返す
概要:離上を返します
引数:キーボタン名
戻値:真偽値
--------------------------------------------------------------------*/
#modcfunc GetKeyButtonUp
return _up

#global
#endif

上記のファイルができたら、「class_sp2.hsp」として保存しましょう。

当サイトコンテンツの複写・転載・引用は禁止しております。