こちらのプラグインを
ゲーム内のスイッチのONOFFによって
プラグインの通信自体をあり、なし(プラグインを停止)
することはできませんでしょうか?
スクリプトで条件分岐のスイッチのONOFFを記載したら
書き方がおかしいのか value が無いよ?とういうエラーがでます
色々自分なりに試してみましたがONOFFをできませんでした
ご助力お願いしたいです
くらむぼん様のOnlineAvatarについて【解決】
くらむぼん様のOnlineAvatarについて【解決】
最後に編集したユーザー tetu [ 2020年3月07日(土) 23:35 ], 累計 1 回
- Plasma Dark
- 記事: 736
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: くらむぼん様のOnlineAvatarについて
書いた内容を貼り付けていただけると助言しやすくなります。スクリプトで条件分岐のスイッチのONOFFを記載したら
書き方がおかしいのか value が無いよ?とういうエラーがでます
firebase にはメソッドとして goOffline と goOnline がありますので、ゲーム内のスイッチのONOFFによって
プラグインの通信自体をあり、なし(プラグインを停止)
することはできませんでしょうか?
スイッチ変化にフックしてそれらを呼び出せば実現可能かと思います。
https://firebase.google.com/docs/refere ... e.Database
Re: くらむぼん様のOnlineAvatarについて
条件分岐は
$gameSwitches.value(設定したい番号)
こちらをifでの分岐で行いました
各、OnlineManager.〇〇〇 = function()の下にこちらを記載してifの中に全部入れたらどうなるのかなぁと思って
やってみました
これをやると、valueがエラーになります
もしかしたら、このプラグイン自体が(function() {で全部をくくっているため
起動時に$gameSwitches.valueこれをスクリプトで定義する前に動いていたりするのかなぁ~など
色々試行錯誤しております
見当違いの事をしているのかもしれませんが、if else で分けることができたら
もしかしたら、サーバー変更などもできるんじゃないかなぁなど考えております
$gameSwitches.value(設定したい番号)
こちらをifでの分岐で行いました
各、OnlineManager.〇〇〇 = function()の下にこちらを記載してifの中に全部入れたらどうなるのかなぁと思って
やってみました
これをやると、valueがエラーになります
もしかしたら、このプラグイン自体が(function() {で全部をくくっているため
起動時に$gameSwitches.valueこれをスクリプトで定義する前に動いていたりするのかなぁ~など
色々試行錯誤しております
見当違いの事をしているのかもしれませんが、if else で分けることができたら
もしかしたら、サーバー変更などもできるんじゃないかなぁなど考えております
- Plasma Dark
- 記事: 736
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: くらむぼん様のOnlineAvatarについて
無名関数でくくっているから、というわけではありません。もしかしたら、このプラグイン自体が(function() {で全部をくくっているため
起動時に$gameSwitches.valueこれをスクリプトで定義する前に動いていたりするのかなぁ~など
が、 $gameSwitches に Game_Switches インスタンスを代入する前に初期化が走るので、その部分は認識通りかと思います。
まず、 OnlineAvatar.js は firebase.database を利用した非同期型イベント駆動のプログラムを主としています。
このあたりは firebase の公式ドキュメントに詳しく書かれていますが、アレを読むにも多少の知識が必要なので、ざっくり噛み砕いてみます。
公式ドキュメント:
https://firebase.google.com/docs/databa ... data?hl=ja
例えば、 OnlineAvatar.js 内の以下の記述から見ていきましょう。
コード: 全て選択
this.switchRef = firebase.database().ref('switches')
firebase.database.Reference 型には、 on メソッド等でイベントを登録し、登録された内容のイベントが発生した際に、対応して登録した処理を実行させる仕組みがあります。
コード: 全て選択
this.switchRef.on('child_added', function(data) {
$gameSwitches.setValue(data.key, data.val(), true);
});
child_added は参照しているデータに子要素が追加された時に発生するイベントです。
firebaseのデータベース上に登録されたスイッチリストの子要素、つまり、スイッチそのものですね。
他のプレイヤーがオンラインでfirebaseデータベース上にスイッチを追加した時に、それを検知して実行する処理を書いています。
イベント発生時の処理として書かれているのは、 $gameSwitches.setValue なので、このコードは firebaseデータベース上に誰かがスイッチを追加したら、自分のゲームのスイッチも同期する、というコードです。
正確には、スイッチが追加されたイベントと、イベントを検知した時に実行する処理(長いので以後イベントハンドラと呼びます)を登録するだけであって、 on メソッド実行時にその場でゲーム自体の処理を止めて誰かがスイッチを追加したかな?と待ち続けることはありません。
長くなりましたが、つまるところ、これらのイベントハンドラ登録処理だけを条件分岐で切り替えようとする、というアプローチは接続状態を変えたいという要求にはそぐわないのです。
接続状態を変えたい場合どうすればよいか、については次の書き込みに書きます。
- Plasma Dark
- 記事: 736
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: くらむぼん様のOnlineAvatarについて
firebase への接続状態(つまり、 OnlineAvatar.js におけるオンライン状態)を切り替えるためには、 firebase.database.Database に定義された goOffline 及び goOnline メソッドを使用します。
(最初の返信に貼ったURLでリファレンスを確認できます)
特定のスイッチと連動したいということでしたので、 Game_Switches.prototype.setValue にフックしてしまうと良いでしょう。
こんな感じのコードを書いたプラグインを OnlineAvatar.js の下に追加すれば動くんじゃないかなと思います。
firebase オブジェクトのスコープ次第では、 OnlineManager 周りの記述を OnlineAvatar.js そのものに追加する必要はあるかもしれません。
※条件式にスペルミスがあったため修正しました。
(最初の返信に貼ったURLでリファレンスを確認できます)
特定のスイッチと連動したいということでしたので、 Game_Switches.prototype.setValue にフックしてしまうと良いでしょう。
コード: 全て選択
OnlineManager.goOffline = function () {
firebase.database().goOffline();
};
OnlineManager.goOnline = function () {
firebase.database().goOnline();
};
const offlineSwitch = 1; // プラグインパラメータ化するなり何なりご自由に
const _Game_Switches_setValue = Game_Switches.prototype.setValue;
Game_Switches.prototype.setValue = function (switchId, value, byOnline) {
_Game_Switches_setValue.call(this, switchId, value, byOnline);
if (switchId === offlineSwitch) {
if (value) {
OnlineManager.goOffline();
} else {
OnlineManager.goOnline();
}
}
};
firebase オブジェクトのスコープ次第では、 OnlineManager 周りの記述を OnlineAvatar.js そのものに追加する必要はあるかもしれません。
※条件式にスペルミスがあったため修正しました。
最後に編集したユーザー Plasma Dark [ 2020年3月08日(日) 02:55 ], 累計 1 回
Re: くらむぼん様のOnlineAvatarについて
無事動かすことができました
なぜかofflineSwitch が設定されていないよ?というエラーが出ましたが
const offlineSwitch = 1;この部分を//const offlineSwitch = 1;にし
if (switchId === offlieSwitch)こちらの表記に
直接設定したいスイッチ番号を記載したところ動作しました
なぜかofflineSwitch が設定されていないよ?というエラーが出ましたが
const offlineSwitch = 1;この部分を//const offlineSwitch = 1;にし
if (switchId === offlieSwitch)こちらの表記に
直接設定したいスイッチ番号を記載したところ動作しました
Re: くらむぼん様のOnlineAvatarについて
こちらの処理でONOFFを切り替えて通信回数?容量を減らす工夫をしてみます
一番いいのは、このプラグインを二つ起動してfirebaseのデーター保管先を2個所などにできれば
良いのですが、さすがにそれは出来なさそうなのでコレでいったん解決にされていただきます
ありがとうございました。
一番いいのは、このプラグインを二つ起動してfirebaseのデーター保管先を2個所などにできれば
良いのですが、さすがにそれは出来なさそうなのでコレでいったん解決にされていただきます
ありがとうございました。