【解決済み】条件分岐で「イベントから見たプレイヤーの方向」を取得したい

アバター
コットン豆腐
記事: 8
登録日時: 2017年4月07日(金) 17:32
連絡を取る:

【解決済み】条件分岐で「イベントから見たプレイヤーの方向」を取得したい

投稿記事by コットン豆腐 » 2017年5月03日(水) 11:42

いつもお世話になっております。
移動ルートの「プレイヤーの方へ向く」「プレイヤーに近づく」のように、
条件分岐で「イベントから見たプレイヤーの方向」を判定することは可能でしょうか?
Game_Character.moveTowardCharacterあたりに判定している記述自体は見つけたのですが、
浅い知識の為どのように関数化すれば条件分岐から呼び出せるのかが検討も付かず……

ご教授よろしくお願い致します。
最後に編集したユーザー コットン豆腐 on 2017年5月03日(水) 13:32 [ 編集 1 回目 ]

            
水面下でゲーム作ってます。
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: 条件分岐で「イベントから見たプレイヤーの方向」を取得したい

投稿記事by 奏ねこま » 2017年5月03日(水) 12:20

考えてみました。

Game_Character.prototype.turnTowardCharacterのコードを参考にして、

コード: 全て選択

Game_Character.prototype.turnTowardCharacter = function(character) {
    var sx = this.deltaXFrom(character.x);
    var sy = this.deltaYFrom(character.y);
    if (Math.abs(sx) > Math.abs(sy)) {
        this.setDirection(sx > 0 ? 4 : 6);
    } else if (sy !== 0) {
        this.setDirection(sy > 0 ? 8 : 2);
    }
};

こんな感じのスクリプトを作成(イベントから見たプレイヤーの向きを変数#0001に入れるスクリプト)。

コード: 全て選択

$gameVariables.setValue(1,
    (function(character) {
        var sx = this.deltaXFrom(character.x);
        var sy = this.deltaYFrom(character.y);
        if (Math.abs(sx) > Math.abs(sy)) {
            return (sx > 0 ? 4 : 6);
        } else if (sy !== 0) {
            return (sy > 0 ? 8 : 2);
        }
    }.bind($gameMap.event(this.eventId()), $gamePlayer))()
);

上記をイベントコマンドの「スクリプト」で実行すると、変数#0001に向きを入れます。
下なら2、左なら4、右なら6、上なら8になります。
変数を#0001以外にしたい場合は、一行目の「setValue(1,」の部分の数字を変更してください。
アバター
コットン豆腐
記事: 8
登録日時: 2017年4月07日(金) 17:32
連絡を取る:

Re: 条件分岐で「イベントから見たプレイヤーの方向」を取得したい

投稿記事by コットン豆腐 » 2017年5月03日(水) 13:32

>>奏ねこま 様
ご返答ありがとうございます!
成程、無理に1行で収めるための関数化なんて考えずにゲーム変数に代入してあげればよかったのですね……!
難しく考えすぎておりました、的確なコードをありがとうございます!

色々応用が効きそうな考え方を知れてありがたい限りです。どうもありがとうございました!
            
水面下でゲーム作ってます。

“MV:質問” へ戻る