【解決済み】3Dダンジョンのようなキャラ移動に変更したい

ま~くん
記事: 31
登録日時: 2017年7月31日(月) 15:36

【解決済み】3Dダンジョンのようなキャラ移動に変更したい

投稿記事by ま~くん » 2017年8月04日(金) 13:31

いつもお世話になってます。

3Dダンジョンのようなキャラ移動に変更したいのですが、どのようなスクリプトにしたらいいでしょうか?
以下のように、キーが押されたときにそれぞれ動作するようにしたいと考えています。
↑キー:前に進む
→キー:右を向く
←キー:左を向く
↓キー:後ろを向く

よろしくお願いします。
最後に編集したユーザー ま~くん on 2017年8月24日(木) 19:30 [ 編集 2 回目 ]

ま~くん
記事: 31
登録日時: 2017年7月31日(月) 15:36

Re: 3Dダンジョンのようなキャラ移動に変更したい

投稿記事by ま~くん » 2017年8月04日(金) 21:50

とりあえず次のようなコードを書いてみました。

コード: 全て選択

(function() {

  var CurrentDirection = 6;
  var _Game_Player_executeMove = Game_Player.prototype.executeMove;
  Game_Player.prototype.executeMove = function(direction) {
    switch (CurrentDirection) {
      case 2:
        if (Input.isTriggered('up')) {
          this.moveStraight(2);
          this.setDirection(2);
          CurrentDirection = 2;
        } else if (Input.isTriggered('down')) {
          this.setDirection(8);
          CurrentDirection = 8;
        } else if (Input.isTriggered('left')) {
          this.setDirection(6);
          CurrentDirection = 6;
        } else if (Input.isTriggered('right')) {
          this.setDirection(4);
          CurrentDirection = 4;
        };
        break;
      case 4:
        if (Input.isTriggered('up')) {
          this.moveStraight(4);
          this.setDirection(4);
          CurrentDirection = 4;
        } else if (Input.isTriggered('down')) {
          this.setDirection(6);
          CurrentDirection = 6;
        } else if (Input.isTriggered('left')) {
          this.setDirection(2);
          CurrentDirection = 2;
        } else if (Input.isTriggered('right')) {
          this.setDirection(8);
          CurrentDirection = 8;
        };
        break;
      case 6:
        if (Input.isTriggered('up')) {
          this.moveStraight(6);
          this.setDirection(6);
          CurrentDirection = 6;
        } else if (Input.isTriggered('down')) {
          this.setDirection(4);
          CurrentDirection = 4;
        } else if (Input.isTriggered('left')) {
          this.setDirection(8);
          CurrentDirection = 8;
        } else if (Input.isTriggered('right')) {
          this.setDirection(2);
          CurrentDirection = 2;
        };
        break;
      case 8:
        if (Input.isTriggered('up')) {
          this.moveStraight(8);
          this.setDirection(8);
          CurrentDirection = 8;
        } else if (Input.isTriggered('down')) {
          this.setDirection(2);
          CurrentDirection = 2;
        } else if (Input.isTriggered('left')) {
          this.setDirection(4);
          CurrentDirection = 4;
        } else if (Input.isTriggered('right')) {
          this.setDirection(6);
          CurrentDirection = 6;
        };
        break;
    };
  };

})();


それっぽい動作はするようなりましたが、
「こういう書き方あるよ~」とか「ここおかしいよ~」とかありましたらご指摘おねがいします。
最後に編集したユーザー ま~くん on 2017年8月24日(木) 19:30 [ 編集 1 回目 ]
アバター
ビービー
記事: 308
登録日時: 2016年1月12日(火) 18:40

Re: 3Dダンジョンのようなキャラ移動に変更したいにゃ~

投稿記事by ビービー » 2017年8月04日(金) 23:41

こんばんは。

それっぽい動作をするんだったら問題ないと思うんですが、
調べてみたところ
一歩前に前進:this.moveForward()
アクターの向きを取得:this.direction()
押されている間処理を繰り返す:Input.isPressed
というものがあるようなのでそれらを使って作成してみました。

コード: 全て選択

var _Game_Player_executeMove = Game_Player.prototype.executeMove;
Game_Player.prototype.executeMove = function(direction) {
    if (Input.isPressed('up')) {
        this.moveForward();
    }
    if (Input.isTriggered('right')) {
        if(this.direction() == 2){
            this.setDirection(4);
        } else if(this.direction() == 4){
            this.setDirection(8);
        } else if(this.direction() == 6){
            this.setDirection(2);
        } else if(this.direction() == 8){
            this.setDirection(6);
        }
    }
    if (Input.isTriggered('left')) {
        if(this.direction() == 2){
            this.setDirection(6);
        } else if(this.direction() == 4){
            this.setDirection(2);
        } else if(this.direction() == 6){
            this.setDirection(8);
        } else if(this.direction() == 8){
            this.setDirection(4);
        }
    }
    if (Input.isTriggered('down')) {
        if(this.direction() == 2){
            this.setDirection(8);
        } else if(this.direction() == 4){
            this.setDirection(6);
        } else if(this.direction() == 6){
            this.setDirection(4);
        } else if(this.direction() == 8){
            this.setDirection(2);
        }
    }
};


ほぼ同じ動作だと思いますが、上を押しているあいだ前に進み続けます。
------------------------------------------------------
Twitterやってます。
https://twitter.com/BB_ENTER
ブログもやってます。
http://bb-entertainment-blog.blogspot.jp/
アバター
まっつUP
記事: 1155
登録日時: 2016年8月11日(木) 15:38
お住まい: タケノコ王国

Re: 3Dダンジョンのようなキャラ移動に変更したいにゃ~

投稿記事by まっつUP » 2017年8月05日(土) 00:37

りよねこ様
お世話になりますにゃ。
引数のdirectionくんがリストラされているのは寂しいと思いましたにゃ。
最初のキーが押された時の動作の意味が分かったため
せっかくなので改変案を貼っておくにゃ。
Input.isTriggeredの分岐はつけないとキー押下時に
キャラがあらぶるのでつける方法しか思い浮かばなかったにゃ(半ギレ)

コード: 全て選択

Game_Player.prototype.executeMove = function(direction) {
    if(direction === 8){
        this.moveForward();
        return;
    }
    if (Input.isTriggered('down')) this.turn180();
    if (Input.isTriggered('left')) this.turnLeft90();
    if (Input.isTriggered('right')) this.turnRight90();
};
RPGで笑顔を・・・

ツイッター(ツクラーの巣窟)(閲覧は自己責任でお願いします)
https://twitter.com/mattuup

github
https://github.com/mattuup/RPGMakerMZ
ま~くん
記事: 31
登録日時: 2017年7月31日(月) 15:36

Re: 3Dダンジョンのようなキャラ移動に変更したい

投稿記事by ま~くん » 2017年8月05日(土) 08:32

ビービーさま、まっつUPさま、ご指摘いただきありがとうございます。

ビービーさまの書いてくれた以下の機能いいですね。
・一歩前に前進:this.moveForward()
・アクターの向きを取得:this.direction()
・押されている間処理を繰り返す:Input.isPressed
使わせていただきます。

まっつUPさまのコードにある「turn~」には気が付きませんでした。
これもぜひ使わせてください。

お二方のコードはすっきりしててきれいなので、とても勉強になります。
どうもありがとうございます。

“MV:質問” へ戻る