0

Phaser を使用して縦スクロールのプラットフォーム ゲームを作成していますが、ランダムに配置されたプラットフォームを作成してジャンプする方法がわかりません。これは私がこれまでに持っているコードです(不要なものを削除しました):

Platformer.Game = function (game) {
            this._platforms = null;
            this._platform = null;
            this._numberOfPlatforms = 15;
            this._x = this.x;
            this._y = this.y;
        };

        Platformer.Game.prototype = {
            create: function (){
                this.physics.startSystem(Phaser.Physics.ARCADE);
                this.physics.arcade.gravity.y = 200;

                this._platforms = this.add.group();
                Platformer.platform.createPlatform(this);
                Platformer.platform.createPlatform(this);
                Platformer.platform.createPlatform(this);
                Platformer.platform.createPlatform(this);
                Platformer.platform.createPlatform(this);
                Platformer.platform.createPlatform(this);

                game.camera.follow(this._player);

            },

            managePause: function () {
                this.game.paused = true;
                var pausedText = this.add.text(100, 250, "Game paused. Click anywhere to continue.", this._fontStyle);
                this.input.onDown.add(function(){
                    pausedText.destroy();
                    this.game.paused = false;
                }, this);
            },

            update: function () {

            }
        };

        Platformer.platform = {
            createPlatform: function (game) {
                var posX = Math.floor(Math.random() * Platformer.GAME_WIDTH * this._numberOfPlatforms * 70);
                var posY = Math.floor(Math.random() * Platformer.GAME_HEIGHT * this._numberOfPlatforms * 50);
                var platform = game.add.sprite(posX, posY, 'platform');


                game._platforms.add(platform);
                platform.events.onOutOfBounds.add(this.removePlatform, this);
            },

            removePlatform: function (game) {
                this._platform.kill();
            }

        }

それらをランダムに配置するように動作させることはできますが、プラットフォーマーのアイデアは、実際にジャンプできるようにする必要があります. 十分な距離がありますが、遠すぎないので、完全にランダムではないと思います.

いくつかのアイデアがあることを願っています!

4

1 に答える 1

2

これは簡単なアプローチです。実際に始めるだけです。

アイデアは、各プラットフォームの位置を前のプラットフォームに基づいて、いくつかの基本的なルールを構築することです。たとえば、最後の 1 つが左側にあった場合、次の 1 つを右側のどこかに配置します。

このような状況では、最小/最大範囲も適切です。この例では、次のプラットフォームは常に、最後のプラットフォームより少なくとも 200 ピクセル高く、300 ピクセルを超えない高さです。

codepen に再生可能な例があります

platforms = game.add.group();
platforms.enableBody = true;
platforms.physicsBodyType = Phaser.Physics.ARCADE;

// start off on the left 220px above the ground
var x = 0, y = height - 220;

// keep adding platforms until close to the top
while(y > 200) {
  var platform = platforms.create(x, y, 'platform');
  platform.body.immovable = true;
  platform.body.allowGravity = false;

  // find center of game canvas
  var center = width / 2;

  if(x > center) {
    // if the last platform was to the right of the 
    // center, put the next one on the left
    x = Math.random() * center;
  }
  else {
    // if it was on the left, put the next one on the right
    x = center + Math.random() * (center - platformWidth);
  }
  // place the next platform at least 200px higher and at most 300px higher 
  y = y - 200 - 100 * Math.random();
}
于 2014-11-04T00:17:47.293 に答える