複数の特定イベントに自立移動するイベント作成(解決済み)

アバター
hannta029310
記事: 6
登録日時: 2017年9月04日(月) 22:51

複数の特定イベントに自立移動するイベント作成(解決済み)

投稿記事by hannta029310 » 2017年9月12日(火) 16:03

生成されたイベントが複数の特定イベントの中から一番近いイベントに自立移動する方法を知りたいです。

例えば「花粉」というイベントが、複数ある「花」というイベントの中から一番近い「花」に向かって自立移動し、「花」に触れると消滅するイメージです。

もし分かる方がいましたら、どうかご教授お願いします。
最後に編集したユーザー hannta029310 on 2017年9月20日(水) 23:21 [ 編集 1 回目 ]

アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: 複数の特定イベントに自立移動するイベント作成

投稿記事by トリアコンタン » 2017年9月14日(木) 23:06

こんばんは!
まず、以下のコードをjsファイルとして保存してプラグイン管理画面から取り込んでみてください。

コード: 全て選択

(function() {
    'use strict';

    Game_Character.prototype.moveTowardNearestCharacter = function(name) {
        var character = this.getNearestCharacter(name);
        if (character) {
            this.moveTowardCharacter(character);
        }
    };

    Game_Character.prototype.getNearestCharacter = function(name) {
        var distance  = Infinity;
        var character = null;
        $gameMap.events().forEach(function(event) {
            if (event === this || event.event().name !== name) {
                return;
            }
            var distanceToEvent = this.deltaXFrom(event.x) + this.deltaYFrom(event.y);
            if (distanceToEvent < distance) {
                character = event;
                distance  = distanceToEvent;
            }
        }, this);
        return character;
    };
})();


次に自律移動のスクリプトから以下を実行してください。(nameはイベント名に置き換えてください)

コード: 全て選択

this.moveTowardNearestCharacter('name');


こうすることでマップ内の指定した名称のイベントの中から最も近い位置にあるイベントに向かって移動します。
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
アバター
hannta029310
記事: 6
登録日時: 2017年9月04日(月) 22:51

Re: 複数の特定イベントに自立移動するイベント作成

投稿記事by hannta029310 » 2017年9月19日(火) 14:47

>トリアコンタンさん

jsファイルまで作っていただきありがとうございます!
問題なく近い位置のイベントに移動はしたのですが、、、

一番最初に移動を開始したイベントが指定したイベントAに、
自立移動スクリプトを実行している他のイベントも、イベントAより近いイベントを無視してイベントAに向かって移動してしまいます。

原因は何なのでしょうか…?イベントをコピーしているのが問題なのでしょうか…
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: 複数の特定イベントに自立移動するイベント作成

投稿記事by トリアコンタン » 2017年9月19日(火) 23:04

すみません!
確認したところ処理が一部間違ってました。
正しくは以下の通りです。

コード: 全て選択

(function() {
    'use strict';

    Game_Character.prototype.moveTowardNearestCharacter = function(name) {
        var character = this.getNearestCharacter(name);
        if (character) {
            this.moveTowardCharacter(character);
        }
    };

    Game_Character.prototype.getNearestCharacter = function(name) {
        var distance  = Infinity;
        var character = null;
        $gameMap.events().forEach(function(event) {
            if (event === this || event.event().name !== name) {
                return;
            }
            var distanceToEvent = Math.abs(this.deltaXFrom(event.x)) + Math.abs(this.deltaYFrom(event.y));
            if (distanceToEvent < distance) {
                character = event;
                distance  = distanceToEvent;
            }
        }, this);
        return character;
    };
})();
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
アバター
hannta029310
記事: 6
登録日時: 2017年9月04日(月) 22:51

Re: 複数の特定イベントに自立移動するイベント作成

投稿記事by hannta029310 » 2017年9月20日(水) 23:20

ありがとうございます、思った通りの動作になりました!

“MV:質問” へ戻る