【解決済】スクリプト改変依頼【スイッチ→セルフスイッチ】

siga
記事: 3
登録日時: 2017年12月17日(日) 16:39

【解決済】スクリプト改変依頼【スイッチ→セルフスイッチ】

投稿記事by siga » 2017年12月17日(日) 16:52

初めて投稿いたします。ツクール初心者です。よろしくお願いいたします。

こちらshirogane様が公開されているスクリプトの改変をお願いしたく参りました。
https://qiita.com/shirogane/items/1f2dc5baf8433269ffce

コード: 全て選択

var switchIndex = 1
if(!$gameSwitches.value(switchIndex)){
  if(Math.sqrt(Math.pow(this.character(-1)._x - this.character(1)._x,2) + Math.pow(this.character(-1)._y - this.character(1)._y,2))<0.5){
    $gameSwitches.setValue(switchIndex,true)
  }
}

衝突判定をするスクリプトで、衝突したと判定されるとスイッチN番がONになるスクリプトなのですが
スイッチではなくそのイベントのセルフスイッチがONにするようにしたいです。

自分で色々試したのですがJavaScript初心者のためお手上げ状態です。
救いの手を差し伸べて頂ければ幸いです。
最後に編集したユーザー siga on 2017年12月17日(日) 20:17 [ 編集 1 回目 ]

アバター
しぐれん
記事: 972
登録日時: 2017年3月28日(火) 22:22
連絡を取る:

Re: スクリプト改変依頼【スイッチ→セルフスイッチ】

投稿記事by しぐれん » 2017年12月17日(日) 17:17

this.character(-1)がプレイヤーを取得、this.character(1)がイベント1を取得だったと思います。

ちなみに、セルフスイッチの操作は以下のような方法で行います。
(イベントコマンドのセルフスイッチ操作の実装より)

コード: 全て選択

// Control Self Switch
Game_Interpreter.prototype.command123 = function() {
    if (this._eventId > 0) {
        var key = [this._mapId, this._eventId, this._params[0]];
        $gameSelfSwitches.setValue(key, this._params[1] === 0);
    }
    return true;
};


処理で分からないところがあったら、Game_Interpreter周辺を探すと見つけやすいです。
現在、プラグイン依頼はお休み中です。
siga
記事: 3
登録日時: 2017年12月17日(日) 16:39

Re: スクリプト改変依頼【スイッチ→セルフスイッチ】

投稿記事by siga » 2017年12月17日(日) 18:07

しぐれん 様
ありがとうございます。

コード: 全て選択

$gameSelfSwitches.setValue([this._mapId, this._eventId, "B"], true)
  if(Math.sqrt(Math.pow(this.character(-1)._x - this.character(1)._x,2) + Math.pow(this.character(-1)._y - this.character(1)._y,2))<0.5){
   $gameSwitches.setValue([this._mapId, this._eventId, "B"], true)
 }

見様見真似でセルフスイッチをONにする記述はできたのですが
衝突していないのに無条件でセルフスイッチがONになってしまいます。

JavaScript初心者と申しましたがここがここになんとなく対応してるのだな程度しか分からず
お恥ずかしながら正直どこをどう組み立ててよいのか分からない状況です。

どうすれば反映してくれるのでしょうか?どなたでもご教授頂けると幸いです。
アバター
しぐれん
記事: 972
登録日時: 2017年3月28日(火) 22:22
連絡を取る:

Re: スクリプト改変依頼【スイッチ→セルフスイッチ】

投稿記事by しぐれん » 2017年12月17日(日) 18:46

コード: 全て選択

$gameSelfSwitches.setValue([this._mapId, this._eventId, "B"], true)

この処理が一番上にあるので、if文の判定前に処理が行われて無条件でスイッチがオンになります。
if文の内側に移動しましょう。

$gameSwitches.setValue([this._mapId, this._eventId, "B"], true)の太字にした部分を1にしてみてください。
マップイベント1のセルフスイッチBがONになるはずです。

恥ずかしがらずにバンバンやってみましょう。
試行錯誤を頑張る人は応援します。
現在、プラグイン依頼はお休み中です。
siga
記事: 3
登録日時: 2017年12月17日(日) 16:39

できました!!

投稿記事by siga » 2017年12月17日(日) 20:16

しぐれん 様

丁寧なご解説ありがとうございます。
おかげ様で衝突判定後にセルフスイッチを操作するプラグインに書き換えることができました!

コード: 全て選択

if(Math.sqrt(Math.pow(this.character(-1)._x - this.character(1)._x,2) + Math.pow(this.character(-1)._y - this.character(1)._y,2))<0.5){
 $gameSelfSwitches.setValue([this._mapId, 1, "B"], true)
 }


果たしてこれで完璧なのか分かりませんが今の所何の問題もなく運転できているので満足です!
これを使ってゲーム制作を進めて行きたいと思います。

まさか自力でできるものだとは思わなかったです(笑)
思い切って質問した甲斐がありました。本日は本当にありがとうございました!

“MV:プラグイン素材のリクエスト” へ戻る