спрайт не будет сталкиваться с 2 различными массивами, только один - PullRequest
0 голосов
/ 26 мая 2019

В настоящее время я делаю небольшую платформерную игру , в которой игрок бесконечно прыгает , очень похоже на игру для Android "Abduction".
Мне удалось создать платформ в случайных местах с определенным интервалом и добавление их в массив.
Однако я могу заставить спрайт игрока столкнуться только с одним из массивов платформ, который является массивом this.walls, который я создал, поэтому у меня есть набор стартовое место для игрока.
Кто-нибудь знает, в чем может быть проблема. Кстати, уродливый код, я совсем новичок в этом.

Я проверил update: функцию, чтобы увидеть, не забыл ли я добавить туда что-нибудь. Я проверил код и все виды вещей, но я совершенно потерян.

var playState = {
preload: function () {

},

create: function () {
    game.add.image (0, 0,'bg');
    game.physics.startSystem(Phaser.Physics.ARCADE);
    game.renderer.renderSession.roundPixels = true;

    this.cursor = game.input.keyboard.createCursorKeys();

    game.input.keyboard.addKeyCapture(
        [Phaser.Keyboard.UP, Phaser.Keyboard.DOWN, Phaser.Keyboard.LEFT, Phaser.Keyboard.RIGHT]);

    this.wasd = {
        up: game.input.keyboard.addKey(Phaser.Keyboard.W), left: game.input.keyboard.addKey(Phaser.Keyboard.A), right: game.input.keyboard.addKey(Phaser.Keyboard.D)
    };


    this.player = game.add.sprite(game.width/2, game.height/1.2, 'player'); 
    this.player.anchor.setTo(0.5, 0.5);
    game.physics.arcade.enable(this.player);
    this.player.body.gravity.y = 800;

   this.scoreLabel = game.add.text(30, 30, 'score: 0', 
        { font: '18px Arial', fill: '#ffffff' });
    game.global.score = 0;

    game.time.events.loop(1000, this.updateScore);
    game.time.events.loop(4000, this.addPlatform);

    this.createWorld();



},


 update: function () {
    game.physics.arcade.collide(this.player, this.walls);
    game.physics.arcade.collide(this.player, this.platforms);



    if (!this.player.inWorld) {
        this.playerDie();
    }

     this.movePlayer();


},
    updateScore: function(){
        this.score +=1;
        game.global.score +=1;
        //fix this at some point 

    },


createWorld: function() {
    this.walls = [];

    this.walls.push(game.add.sprite(170, 750, 'platform', 0));
    this.walls.push(game.add.sprite(70, 650, 'platform', 0));
    this.walls.push(game.add.sprite(320, 550, 'platform', 0));
    this.walls.push(game.add.sprite(200, 450, 'platform', 0));
    this.walls.push(game.add.sprite(10, 550, 'platform', 0));
    this.walls.push(game.add.sprite(70, 350, 'platform', 0));
    this.walls.push(game.add.sprite(310, 300, 'platform', 0));
    this.walls.push(game.add.sprite(230, 200, 'platform', 0));
    this.walls.push(game.add.sprite(100, 100, 'platform', 0));
    this.walls.push(game.add.sprite(270, 0, 'platform', 0));




    for (var x=0; x< this.walls.length; x++) {
        game.physics.arcade.enable(this.walls[x]);
        this.walls[x].enableBody = true;
        this.walls[x].body.immovable = true;
        this.walls[x].body.velocity.y = 20;

        } 

},
addPlatform: function() {
    this.platforms = [];

    this.platforms.push(game.add.sprite(game.rnd.integerInRange(0, 350),-20,'platform',0));


    for (var x=0; x< this.platforms.length; x++) {
        game.physics.arcade.enable(this.platforms[x]);
        this.platforms[x].enableBody = true;
        this.platforms[x].body.immovable = true;
        this.platforms[x].body.velocity.y = 20;

    }
},




movePlayer: function() {
    if (this.cursor.left.isDown || this.wasd.left.isDown) {
        this.player.body.velocity.x = -250;
    }
    else if (this.cursor.right.isDown || this.wasd.right.isDown) {
        this.player.body.velocity.x = 250;
    }
    else { 
        this.player.body.velocity.x = 0;
    }

    if ((this.cursor.up.isDown || this.wasd.up.isDown)
        && this.player.body.touching.down){
        this.player.body.velocity.y = -450;
    }
},
playerDie: function() {
    this.player.kill();

    //this.deadSound.play();
    //this.emitter.x = this.player.x;
    //this.emitter.y = this.player.y;
    //this.emitter.start(true, 800, null, 15);
    game.time.events.add(1000, this.startMenu, this);
    game.camera.shake(0.02, 300);
},

startMenu: function() {
    game.state.start('menu');
},



};

this.walls, поэтому у меня есть стартовая площадка для множества платформ, а this.platforms - это случайно сгенерированные платформы.

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

...