alert,confirmの理解に加え、ゲームでの応用を考えてみました。
##alert
alert("文字列")でポップアップを表示
##confirm
confirm("文字列")でOK,キャンセルを問うポップアップを表示
OKを押下した際はtrueを返すので、if文と組み合わせることで設問に対する処理も行える
##応用例 RPGツクールMVでalert,confirmを使った利用規約確認
要件:
・confirmで設問
・キャンセル時にalertでメッセージを表示後、ウィンドウを終了
・テストプレイ時は実行しない
//rpg_scenes.jsの391行目の処理。起動時に実行される。
Scene_Boot.prototype.start = function() {
Scene_Base.prototype.start.call(this);
SoundManager.preloadImportantSounds();
if (DataManager.isBattleTest()) {
DataManager.setupBattleTest();
SceneManager.goto(Scene_Battle);
} else if (DataManager.isEventTest()) {
DataManager.setupEventTest();
SceneManager.goto(Scene_Map);
} else {
this.checkPlayerLocation();
DataManager.setupNewGame();
SceneManager.goto(Scene_Title);
Window_TitleCommand.initCommandPosition();
}
this.updateDocumentTitle();
//ここから追加処理。
if(!$gameTemp.isPlaytest()){//テストプレイではないときに実行
const answer = confirm("利用規約に同意しますか?");
if (answer){
//OK押下時の処理。同意したら二回目以降は問わないフラグを立て、if(!$gameTemp.isPlaytest()の実行条件にすれば便利になる
} else {
//キャンセル押下時の処理
alert("終了します");
window.close();
}
}
};
結果、正しく動作することができました。
##課題
同意した際に変数を変化させ、2回目以降確認しない処理ができませんでした。
具体的にはScene_Boot.prototype.startの処理前に
let confirmAnswer = 0;
とし、
if(confirmAnswer === 0){
if(!$gameTemp.isPlaytest()){//テストプレイではないときに実行
const answer = confirm("利用規約に同意しますか?");
if (answer){
confirmAnswer = 1;
} else {
alert("終了します");
window.close();
}
}
}
のとしても、起動都度、let confirmAnswer = 0;を読んでしまうためか、confirmAnswer = 1の値が保持されないのか、毎回確認が発生してしまいました。
勉強不足を痛感した次第です。
解決したら加筆します。