Как заставить игрока не сталкиваться с платформой и определенными условиями в Phaser 2 (CE) - PullRequest
0 голосов
/ 19 мая 2019

Я кодирую платформер, я делаю столкновение между платформой и игроком, чтобы он мог пройти через платформы, но игрок не проходит через платформы

Сборка платформы:

for (var i = 0; i < 35; i++) {
            var type = i % 2 === 1 ? 'platform' : 'ice-platform';
            var platform = this.platforms.create(x, y, type);

            if (platform.key === 'ice-platform') {
                platform.body.velocity.x = this.rnd.between(50, 100);

                if (Math.random() > 0.5) {
                    platform.body.velocity.x *= -1;
                }
            }

wrapPlatform: function (platform) {
        if (platform.key === 'ice-platform') {
            if (platform.body.velocity.x < 0 && platform.x <= -160) {
                platform.x = 640;
            } else if (platform.body.velocity.x > 0 && platform.x >= 600) {
                platform.x = -160;
            }
        }

    },

Столкновение с игроком:

setFriction: function (player, platform) {

       if (platform.key === 'ice-platform') {
           player.body.x -= platform.body.x - platform.body.prev.x;
       }

   },

1 Ответ

0 голосов
/ 19 мая 2019

Совет: используйте game.add.sprite(...), потому что если вы используете ...add.image..., он не будет работать

var game = new Phaser.Game(800, 600, Phaser.AUTO, 'game', { preload: preload, create: create, update: update });

var ground, player;
var cursors;

function preload() {
  this.load.baseURL = 'https://raw.githubusercontent.com/nazimboudeffa/assets/master/';
  this.load.crossOrigin = 'anonymous';
  this.load.image('ground', 'pics/platform.png');
  this.load.image('dude', 'sprites/phaser-dude.png');
}

function create() {

  game.physics.startSystem(Phaser.Physics.ARCADE);

  ground = game.add.sprite(0, 200, 'ground');
  game.physics.arcade.enable(ground);
  ground.body.enable = true;
  ground.body.immovable = true;
  
  
  player = game.add.sprite(0, 300, 'dude');
  game.physics.arcade.enable(player);
  player.body.gravity.y = 300;

  player.body.collideWorldBounds = true;
  
  cursors = game.input.keyboard.createCursorKeys();

}

function update(){

  if (player.y < ground.y){
    game.physics.arcade.collide(player, ground)
  }
    
  if(cursors.up.isDown){
    player.body.velocity.y = -240;
  }
}
<script src="https://cdn.jsdelivr.net/npm/phaser-ce@2.13.1/build/phaser.js"></script>
...