お世話になります。
JavaScriptも全く初心者なのですが、プラグインを自作しています。
かなり基本的な部分で躓いてしまっているので、質問させてください。
スイッチを条件として、マウス操作を無効にするプラグインを作ってみようと思い、パラメータの設定とその値の取得、マウス操作の無効はできたのですが、IF分でスイッチを条件にする方法がわかりません。
単純に、下記の様にスイッチ4がONだったらコンソールに「ON」と表示させてみようと思ったのですが、できませんでした。
if($gameSwitches.value(4)){
console.log("ON")
};
「Cannot read property 'value' of null」というエラーが出てしまいます。
どう解決したものかわかりませんので、基礎的な部分で申し訳ありませんが、ご助言いただけませんでしょうか。
【解決済】プラグインでスイッチを条件に使うには
Re: プラグインでスイッチを条件に使うには
javascript初心者ということで、どこまで説明すればよいかわからないのでとりあえず端的に言うと。
そのif文はゲーム起動時のかなり早い時点、プラグインを読み込むときに実行されます。
なのでそのときにはまだ$gameSwitchesは存在しません。
そのif文はゲーム起動時のかなり早い時点、プラグインを読み込むときに実行されます。
なのでそのときにはまだ$gameSwitchesは存在しません。
Re: プラグインでスイッチを条件に使うには
>奏ねこま 様
ご返信ありがとうございます。
なるほど、そういう事ですか。
なんとなく分かってはいたものの、どう動かしたらよいものかが分かりませんでした。
理想としては、指定のスイッチをON/OFFするたびに、TouchInput.updateの4行をfalseにするというイメージでやっていました。
this._triggered = false;
this._cancelled = false;
this._moved = false;
this._released = false;
しかし、JavaScriptが初心者なので、スイッチをON/OFFするたびに処理したい事を起動する術がわかりません。
これはJavaScriptを勉強してからしか難しそうですね。
とりあえずは、マウス操作を無効にするところまではできているので、その状態で制作を進めつつ勉強しておこうかと思います。
ご返信ありがとうございます。
なるほど、そういう事ですか。
なんとなく分かってはいたものの、どう動かしたらよいものかが分かりませんでした。
理想としては、指定のスイッチをON/OFFするたびに、TouchInput.updateの4行をfalseにするというイメージでやっていました。
this._triggered = false;
this._cancelled = false;
this._moved = false;
this._released = false;
しかし、JavaScriptが初心者なので、スイッチをON/OFFするたびに処理したい事を起動する術がわかりません。
これはJavaScriptを勉強してからしか難しそうですね。
とりあえずは、マウス操作を無効にするところまではできているので、その状態で制作を進めつつ勉強しておこうかと思います。
Re: プラグインでスイッチを条件に使うには
Tusk さんが書きました:理想としては、指定のスイッチをON/OFFするたびに、TouchInput.updateの4行をfalseにするというイメージでやっていました。
やろうとしてダメだったそのコードを書いてもらえれば何かアドバイスできるかもしれません。
Re: プラグインでスイッチを条件に使うには
>奏ねこま様
ありがとうございます。
お気遣い、本当に感謝いたします。
やってダメであったことは、本当に知識が乏しいが故の無茶な事でして、パラメーターに「Switch」(typeはswitch)を作っておいて、
var param = PluginManager.parameters('TouchMoveInvalid');
var Switch = param['Switch'];
if($gameSwitches.value(Switch)){
TouchInput.update = function() { 処理内容は略 }
}
……といった感じでした。
$gameSwitchesでvalueがnullであるとエラーがでていたので、なんとなく分かってはいたものの、困り果てていたというわけです。
とりあえずは、プラグインコマンドでON/OFFを切り替えるという仕様にしたところ、希望の動作はできるようになりました。
知識が乏しい自分にアドバイスを本当にありがとうございます。
ありがとうございます。
お気遣い、本当に感謝いたします。
やってダメであったことは、本当に知識が乏しいが故の無茶な事でして、パラメーターに「Switch」(typeはswitch)を作っておいて、
var param = PluginManager.parameters('TouchMoveInvalid');
var Switch = param['Switch'];
if($gameSwitches.value(Switch)){
TouchInput.update = function() { 処理内容は略 }
}
……といった感じでした。
$gameSwitchesでvalueがnullであるとエラーがでていたので、なんとなく分かってはいたものの、困り果てていたというわけです。
とりあえずは、プラグインコマンドでON/OFFを切り替えるという仕様にしたところ、希望の動作はできるようになりました。
知識が乏しい自分にアドバイスを本当にありがとうございます。
Re: プラグインでスイッチを条件に使うには
javascriptの知識うんぬんよりもプラグインの仕組みの理解が不足してる感じですね。まず最低限改めるべき点は
・スイッチによる切り替えはTouchInput.updateの中でやる
ことです。なお、中であっても$gameSwitchesがnullのことはあるのでnullかどうかのチェックはすること。それと、本題とは関係ありませんがプラグイン設定値は文字列として取得されます。たとえばSwitchに「1」を設定していたとして、
これでSwitchに入る値は1という「文字」であって数値ではありません。
文字のままでも動きはしますが、できれば
などで数値に変換することをオススメします。
・スイッチによる切り替えはTouchInput.updateの中でやる
ことです。なお、中であっても$gameSwitchesがnullのことはあるのでnullかどうかのチェックはすること。それと、本題とは関係ありませんがプラグイン設定値は文字列として取得されます。たとえばSwitchに「1」を設定していたとして、
コード: 全て選択
var Switch = param['Switch'];
文字のままでも動きはしますが、できれば
コード: 全て選択
var Switch = Number(param['Switch']);
Re: プラグインでスイッチを条件に使うには
MZ版しかないですがプラグイン講座を読んでみるといいと思います。
そんなに長い話じゃないです。
https://tkool.jp/mz/plugin/make/koushiki.html
↾のページの半分くらいまでを眺めつつ↓を見れば、全くわけがわからんということはないかと。
正解とは言わないものの実現方法の例
そんなに長い話じゃないです。
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/
https://twitter.com/wtr_in_reverie/
Re: プラグインでスイッチを条件に使うには
> 奏ねこま 様
アドバイスを本当にありがとうございます。
最初はTouchInput.updateの中に書いていたのですけど、条件分岐でNULLが返ってきて分からなくなり、いろいろと触りまくっているうちにあんな形に。
JavaScriptとプラグインの両方への理解ですね(;'∀')
プログラム自体はJavaやCを少しやっていたのですけど、いやはやプラグインの作成はまだ第一歩を踏み出せておりませぬ。
色々な人にお世話になっております。
アドバイスを本当にありがとうございます。
最初はTouchInput.updateの中に書いていたのですけど、条件分岐でNULLが返ってきて分からなくなり、いろいろと触りまくっているうちにあんな形に。
JavaScriptとプラグインの両方への理解ですね(;'∀')
プログラム自体はJavaやCを少しやっていたのですけど、いやはやプラグインの作成はまだ第一歩を踏み出せておりませぬ。
色々な人にお世話になっております。
Re: プラグインでスイッチを条件に使うには
>WTR様
おおお!こんな素晴らしい教材まで・・!( ;∀;)
すごく勉強になります!
NULLかどうかを判定しなくちゃいけないですよね・・
なんというか、ツクール自体がどういう流れでプロジェクトを動かしているのかを理解していないので、どこから手を付けて良いモノかが分からなかったです。
すごくありがたいです!
おおお!こんな素晴らしい教材まで・・!( ;∀;)
すごく勉強になります!
NULLかどうかを判定しなくちゃいけないですよね・・
なんというか、ツクール自体がどういう流れでプロジェクトを動かしているのかを理解していないので、どこから手を付けて良いモノかが分からなかったです。
すごくありがたいです!