ページ 11

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

Posted: 2017年8月04日(金) 13:31
by ま~くん
いつもお世話になってます。

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

よろしくお願いします。

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

Posted: 2017年8月04日(金) 21:50
by ま~くん
とりあえず次のようなコードを書いてみました。

コード: 全て選択

(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;
    };
  };

})();
それっぽい動作はするようなりましたが、
「こういう書き方あるよ~」とか「ここおかしいよ~」とかありましたらご指摘おねがいします。

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

Posted: 2017年8月04日(金) 23:41
by ビービー
こんばんは。

それっぽい動作をするんだったら問題ないと思うんですが、
調べてみたところ
一歩前に前進: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);
        }
    }
};
ほぼ同じ動作だと思いますが、上を押しているあいだ前に進み続けます。

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

Posted: 2017年8月05日(土) 00:37
by まっつUP
りよねこ様
お世話になりますにゃ。
引数の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();
};

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

Posted: 2017年8月05日(土) 08:32
by ま~くん
ビービーさま、まっつUPさま、ご指摘いただきありがとうございます。

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

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

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