機能を複製する
メインプログラムで実際に機能を複製してみましょう。
「機能を設計する」の章では、命令や関数がスペースキーしか対応できませんでしたが、複製することで、同じ機能を他のキーでも使えるようにしていきます。
インスタンス生成
インスタンス生成は、同じ機能(命令関数群)を複製します。
クラスで記述した初期化処理(#modinit)が実行されます。
複製時に新しい名前を付けて、その後はその名前ごとに命令関数群が使えるようになります。
newmod 新しい命令関数群名, 複製するモジュール名, 初期化時の引数...
newmod SpaceKey,KeyButton,32 //SpaceキーのKeyButtonを作成・初期化
命令名:newmod「命令関数群を複製・初期化する」
新しい命令関数群名:SpaceKey「スペースキー用のキーボタン命令関数群」
複製するモジュール名:KeyButton「キーボタン命令関数群」
引数:32「スペースキーのキーコード(32)」
これで、スペースキーを対象にしたKeyButton関数群ができました。
複製命令の使い方
複製命令は、#modfuncで作成した命令のことです。
複製命令は、必ず第一引数に複製した命令関数群名を記し、何に対して同じ命令関数群の機能を使うのかを指定します。
複製命令は以下のように呼び出します。
複製命令名 複製した命令関数群名,引数1...
KeyButtonMain SpaceKey //Spaceキーの押下状態を更新する
複製命令名:KeyButtonMain「キーボタンのメイン処理」
複製した命令関数群名:SpaceKey「スペースキー」
※今回第2引数以降は使用しません
上記は、「スペースキーに対するKeyButtonMain関数を実行する」というプログラムになります。
複製関数の使い方
複製関数は、#modcfuncで作成した命令のことです。
複製関数は、必ず第一引数に複製した命令関数群名を記し、何に対して同じ命令関数群の機能を使うのかを指定します。
複製関数は以下のように呼び出します。
複製関数名(複製した命令関数群名,引数1...)
GetKeyButtonFlag(SpaceKey) //押下フラグを取得して表示
複製関数名:GetKeyButtonFlag()「押下状態を取得する」
複製した命令関数群名:SpaceKey「スペースキー」
※今回第2引数以降は使用しません
上記は、「スペースキーに対するGetKeyButtonFlag関数を実行する」というプログラムになります。
複製した命令関数群の停止・削除(破棄)
機能を停止して削除します。
クラスで記述した停止処理(#modterm)が実行されます。
これを実行すると、以後複製した命令関数名は改めてインスタンス生成しないと使えません。
delmod 複製した命令関数群名
delmod SpaceKey //SpaceキーのKeyButtonを削除
命令名:delmod「複製した命令関数群の停止と削除」
複製した命令関数群名:SpaceKey「スペースキー」
変更点の全容
上記の全説明より作成できる「class_sp1.hsp」と同等のプログラムを見てみましょう。
#include "class_sp2.hsp" //class_sp2.hspを読み込む
newmod SpaceKey,KeyButton,32 //SpaceキーのKeyButtonを作成・初期化
repeat
KeyButtonMain SpaceKey //Spaceキーの押下状態を更新する
cls //画面を白で消す
pos 0,0 //描画位置を左上に設定
//Spaceキーの関数
mes "Spaceキーの関数"
//押下フラグを取得して表示
mes " 状態=" + GetKeyButtonFlag(SpaceKey)
//押下離上時間を取得して表示
mes " 時間=" + GetKeyButtonHold(SpaceKey)
//押下時フラグを取得して表示
mes "押下時=" + GetKeyButtonDown(SpaceKey)
//離上時フラグを取得して表示
mes "離上時=" + GetKeyButtonUp(SpaceKey)
await 1000 / 20 //1秒間に約20回ループするように待つ
loop
delmod SpaceKey //SpaceキーのKeyButtonを削除
上記のファイルができたら、「class_sp2.hsp」と同じデスクトップの場所に「class_mp2.hsp」として保存し、実行してみましょう。
2つ以上のキーで使えるようにする
スペースキーと同じようにエンターキーを使えるようにします。
エンターキーを使えるようにする場合は、スペースキーと同様にキーコードとキー名が分かるように複製した命名関数群名をつけてインスタンス生成すればいいだけです。
キーボタン命令のすべての機能は、エンターキーでも同じ処理が使えるようになります。
#include "class_sp2.hsp" //class_sp2.hspを読み込む
newmod SpaceKey,KeyButton,32 //SpaceキーのKeyButtonを作成・初期化
newmod EnterKey,KeyButton,13 //EnterキーのKeyButtonを作成・初期化
repeat
KeyButtonMain SpaceKey //Spaceキーの押下状態を更新する
KeyButtonMain EnterKey //Spaceキーの押下状態を更新する
cls //画面を白で消す
pos 0,0 //描画位置を左上に設定
//Spaceキーの関数
mes "Spaceキーの関数"
//押下フラグを取得して表示
mes " 状態=" + GetKeyButtonFlag(SpaceKey)
//押下離上時間を取得して表示
mes " 時間=" + GetKeyButtonHold(SpaceKey)
//押下時フラグを取得して表示
mes "押下時=" + GetKeyButtonDown(SpaceKey)
//離上時フラグを取得して表示
mes "離上時=" + GetKeyButtonUp(SpaceKey)
//Enterキーの関数
mes "Enterキーの関数"
//押下フラグを取得して表示
mes " 状態=" + GetKeyButtonFlag(EnterKey)
//押下離上時間を取得して表示
mes " 時間=" + GetKeyButtonHold(EnterKey)
//押下時フラグを取得して表示
mes "押下時=" + GetKeyButtonDown(EnterKey)
//離上時フラグを取得して表示
mes "離上時=" + GetKeyButtonUp(EnterKey)
await 1000 / 20 //1秒間に約20回ループするように待つ
loop
delmod SpaceKey //SpaceキーのKeyButtonを削除
delmod EnterKey //EnterキーのKeyButtonを削除
上記のファイルができたら、「class_sp2.hsp」と同じデスクトップの場所に「class_mp2ex.hsp」として保存し、実行してみましょう。
Copyright © 2002-2025 team.Dakuji All Rights Reserved.