【解決済】プラグインでスイッチを条件に使うには

Tusk
記事: 13
登録日時: 2020年10月27日(火) 05:17

【解決済】プラグインでスイッチを条件に使うには

投稿記事by Tusk » 2021年6月17日(木) 07:11

お世話になります。
JavaScriptも全く初心者なのですが、プラグインを自作しています。
かなり基本的な部分で躓いてしまっているので、質問させてください。

スイッチを条件として、マウス操作を無効にするプラグインを作ってみようと思い、パラメータの設定とその値の取得、マウス操作の無効はできたのですが、IF分でスイッチを条件にする方法がわかりません。

単純に、下記の様にスイッチ4がONだったらコンソールに「ON」と表示させてみようと思ったのですが、できませんでした。

if($gameSwitches.value(4)){
console.log("ON")
};


「Cannot read property 'value' of null」というエラーが出てしまいます。

どう解決したものかわかりませんので、基礎的な部分で申し訳ありませんが、ご助言いただけませんでしょうか。


キャプチャ.JPG

キャプチャ2.JPG
最後に編集したユーザー Tusk on 2021年6月26日(土) 01:21 [ 編集 1 回目 ]

奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: プラグインでスイッチを条件に使うには

投稿記事by 奏ねこま » 2021年6月17日(木) 10:54

javascript初心者ということで、どこまで説明すればよいかわからないのでとりあえず端的に言うと。
そのif文はゲーム起動時のかなり早い時点、プラグインを読み込むときに実行されます。
なのでそのときにはまだ$gameSwitchesは存在しません。
Tusk
記事: 13
登録日時: 2020年10月27日(火) 05:17

Re: プラグインでスイッチを条件に使うには

投稿記事by Tusk » 2021年6月17日(木) 13:19

>奏ねこま 様

ご返信ありがとうございます。

なるほど、そういう事ですか。
なんとなく分かってはいたものの、どう動かしたらよいものかが分かりませんでした。

理想としては、指定のスイッチをON/OFFするたびに、TouchInput.updateの4行をfalseにするというイメージでやっていました。

this._triggered = false;
this._cancelled = false;
this._moved = false;
this._released = false;

しかし、JavaScriptが初心者なので、スイッチをON/OFFするたびに処理したい事を起動する術がわかりません。
これはJavaScriptを勉強してからしか難しそうですね。

とりあえずは、マウス操作を無効にするところまではできているので、その状態で制作を進めつつ勉強しておこうかと思います。
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: プラグインでスイッチを条件に使うには

投稿記事by 奏ねこま » 2021年6月17日(木) 13:30

Tusk さんが書きました:理想としては、指定のスイッチをON/OFFするたびに、TouchInput.updateの4行をfalseにするというイメージでやっていました。

やろうとしてダメだったそのコードを書いてもらえれば何かアドバイスできるかもしれません。
Tusk
記事: 13
登録日時: 2020年10月27日(火) 05:17

Re: プラグインでスイッチを条件に使うには

投稿記事by Tusk » 2021年6月17日(木) 15:13

>奏ねこま様

ありがとうございます。
お気遣い、本当に感謝いたします。

やってダメであったことは、本当に知識が乏しいが故の無茶な事でして、パラメーターに「Switch」(typeはswitch)を作っておいて、

var param = PluginManager.parameters('TouchMoveInvalid');
var Switch = param['Switch'];
if($gameSwitches.value(Switch)){

 TouchInput.update = function() { 処理内容は略 }

}

……といった感じでした。
$gameSwitchesでvalueがnullであるとエラーがでていたので、なんとなく分かってはいたものの、困り果てていたというわけです。   


とりあえずは、プラグインコマンドでON/OFFを切り替えるという仕様にしたところ、希望の動作はできるようになりました。

知識が乏しい自分にアドバイスを本当にありがとうございます。
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: プラグインでスイッチを条件に使うには

投稿記事by 奏ねこま » 2021年6月17日(木) 16:06

javascriptの知識うんぬんよりもプラグインの仕組みの理解が不足してる感じですね。まず最低限改めるべき点は

・スイッチによる切り替えはTouchInput.updateの中でやる

ことです。なお、中であっても$gameSwitchesがnullのことはあるのでnullかどうかのチェックはすること。それと、本題とは関係ありませんがプラグイン設定値は文字列として取得されます。たとえばSwitchに「1」を設定していたとして、

コード: 全て選択

 var Switch = param['Switch'];
これでSwitchに入る値は1という「文字」であって数値ではありません。
文字のままでも動きはしますが、できれば

コード: 全て選択

 var Switch = Number(param['Switch']);
などで数値に変換することをオススメします。
アバター
WTR
記事: 558
登録日時: 2015年12月22日(火) 19:14

Re: プラグインでスイッチを条件に使うには

投稿記事by WTR » 2021年6月17日(木) 23:34

MZ版しかないですがプラグイン講座を読んでみるといいと思います。
そんなに長い話じゃないです。
https://tkool.jp/mz/plugin/make/koushiki.html
↾のページの半分くらいまでを眺めつつ↓を見れば、全くわけがわからんということはないかと。

正解とは言わないものの実現方法の例

コード: 全て選択

/*:
 * @target MZ MV
 * @plugindesc 指定スイッチがONのときタッチ・マウス操作を無効化します。
 *
 * @param DISABLE_SW
 * @text 無効化スイッチ
 * @type switch
 * @desc タッチ・マウス操作を無効化するスイッチを指定します。
 * @default 1
 */

(() => {
    "use strict";
    //////////////////////////////////////////////////////////////////////////////////////////////////////////
    const pluginName = document.currentScript.src.split("/").pop().replace(/\.js$/, "");
    const parameters = PluginManager.parameters(pluginName);
    const DISABLE_SW = Number(parameters["DISABLE_SW"]);
    //////////////////////////////////////////////////////////////////////////////////////////////////////////

    // 元の処理を適当な変数に代入しておく
    const _TouchInput_update = TouchInput.update;
    TouchInput.update = function() {
        // $gameSwitches が null でなく、指定スイッチがONのとき
        // タッチ入力をクリアして処理を抜ける
        if ($gameSwitches && $gameSwitches.value(DISABLE_SW)) {
            this.clear();
            return;
        }
        // 退避させておいた元の処理を呼び出して実行する
        _TouchInput_update.apply(this, arguments);
    }

})();
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
Tusk
記事: 13
登録日時: 2020年10月27日(火) 05:17

Re: プラグインでスイッチを条件に使うには

投稿記事by Tusk » 2021年6月21日(月) 01:38

> 奏ねこま 様

アドバイスを本当にありがとうございます。

最初はTouchInput.updateの中に書いていたのですけど、条件分岐でNULLが返ってきて分からなくなり、いろいろと触りまくっているうちにあんな形に。

JavaScriptとプラグインの両方への理解ですね(;'∀')

プログラム自体はJavaやCを少しやっていたのですけど、いやはやプラグインの作成はまだ第一歩を踏み出せておりませぬ。

色々な人にお世話になっております。
Tusk
記事: 13
登録日時: 2020年10月27日(火) 05:17

Re: プラグインでスイッチを条件に使うには

投稿記事by Tusk » 2021年6月21日(月) 01:43

>WTR様

おおお!こんな素晴らしい教材まで・・!( ;∀;)

すごく勉強になります!

NULLかどうかを判定しなくちゃいけないですよね・・
なんというか、ツクール自体がどういう流れでプロジェクトを動かしているのかを理解していないので、どこから手を付けて良いモノかが分からなかったです。

すごくありがたいです!

“MV:質問” へ戻る