見出し画像

【第2回】RPGツクールMZでスマホゲームを作る!!(ツクール仕様変更)

どうも、椿田です。
私事ですが、App storeとGoogle Playにて新作のスマホゲームをリーリスしました♪


無料でプレイできますので、よろしければ遊んでみてください♪


さて、今回もRPGツクールMZからスマホゲームをつくるために工夫したことについて書かせていただきます。

第2回目は、
RPGツクールMZのプログラムを改造して、仕様を変更した箇所のご紹介です♪

1.前置き

まず、大前提のお話なのですが、RPGツクールMZのプログラムを改造を誤って実施した場合、RPGツクールMZ自体が動作しなくなる可能性があります!!
そのため、以下の点を必ず同意した上で実施してください。

・プログラムを改造する前に、必ずプログラムのバックアップを取ってください!!
・本記事の内容は、私が個人的に実施したもの(非公式)で、スマホゲームを制作するにあたり必ずやらなければならないものではありません。
RPGツクールMZの仕様自体とても素晴らしいものです。今回の改造は、自作ゲームを制作するにあたり、より理想的な動作をさせるために個人的に実施しました。
・プログラムの改造は自己責任で実施してください。

以上の点に同意された方のみ、続きをご覧ください。


2.「2本指タップでキャンセル/メニューを開く」機能の無効化

RPGツクールMZの仕様に、「画面を2本指でタップすると、キャンセルボタンの機能をしたり、メニュー画面が開く仕様」があります。
これ自体とても便利な機能ではあるのですが、スマホを両手持ちで操作した際に、両手の親指が画面に触れた時に誤ってメニュー画面を開いてしまうということがテスト中にありました。
そのため、以下のようにRPGツクールMZのソースコードを改造して、この機能を無効化しました。

対象ソースコード:js/rmmz_core.js

TouchInput._onTouchStart = function(event) {
    for (const touch of event.changedTouches) {
        const x = Graphics.pageToCanvasX(touch.pageX);
        const y = Graphics.pageToCanvasY(touch.pageY);
        if (Graphics.isInsideCanvas(x, y)) {
            this._screenPressed = true;
            this._pressedTime = 0;
            if (event.touches.length >= 2) {
//                this._onCancel(x, y);       ←この行をコメントアウト
            } else {
                this._onTrigger(x, y);
            }
            event.preventDefault();
        }
    }
    if (window.cordova || window.navigator.standalone) {
        event.preventDefault();
    }
};

これにより、画面を2本指でタップしてもキャンセルボタンが押されたり、メニューが開くことが無くなります。


3.「ブラウザのフォーカス時のみ画面を描画する」機能の無効化

スマホゲーム開発中に、実機を用いたテストを行っていたのですが、以下の現象が発生し、2日間くらい悩みました。

起こった現象:
実機でゲームを起動すると、BGMは流れるが画面が表示されず真っ暗な状態が続く

なぜ、BGMは流れているのに画面が表示されないのかが最初は全く分からず、今回の開発で一番悩んだところでした。
ログ見ても特にエラーが出てないし・・・なぜ?

悩みまくった結果、RPGツクールのプラグインを提供してくださっているWaff様に助けを求めました。
(あの時は本当にありがとうございました。)
Waff様ツイッターアカウント:@wafs702

どうやら、RPGツクールMZの仕様で、ブラウザ(ゲーム画面)がフォーカスされている状態でないと、ゲーム画面が描画されないという仕様になっているようです。
そのため、BGMは流れるが画面が表示されず真っ暗な状態になった場合は、画面中央部をタップすることでゲーム画面が描画されます。

ただ、画面をタップしなくてもゲーム画面が描画される仕様にしたかったので、以下のようにRPGツクールのプログラムを改造しました。
※このやり方は、Waff様に教えていただいた内容ですが、あくまで私個人の自己責任で改造しました。この改造によって、なにか起こったとしてもWaff様は無関係であることをご了承ください。

対象ソースコード:js/rmmz_managers

SceneManager.isGameActive = function() {
    // [Note] We use "window.top" to support an iframe.
//    try {                           ←この行をコメントアウト
//        return window.top.document.hasFocus();       ←この行をコメントアウト
//    } catch (e) {                       ←この行をコメントアウト
        // SecurityError
        return true;
//    }                             ←この行をコメントアウト
};

つまり、条件分岐をなくし、SceneManager.isGameActive()が常にtrueを返してあげるようにすると、ブラウザ(ゲーム画面)がフォーカスされなくてもゲーム画面が描画されるようになります。


4.まとめ

以上が、RPGツクールMZでスマホゲームを制作するにあたって、RPGツクールMZ自体の仕様を変更した部分になります。
今回は、いろんな意味で踏み込んだ内容になりましたが、同じような悩みを抱えている人の助けになれればと思い、書かせていただきました。

次回の記事では、RPGツクールMZでスマホゲームを制作するにあたり、実施した設定内容(画面サイズなど)について書かせていただきます。

この記事が気に入ったらサポートをしてみませんか?