Обратные вызовы таймера Phaser P2 - PullRequest
0 голосов
/ 16 мая 2018

Я создаю игру в Phaser с физикой P2.Когда игрок сталкивается с определенными типами плиток на карте тайлов, ID 405 и 403, я хочу, чтобы была вызвана функция.Столкновения между игроком и тайлами работают правильно, но функции обратного вызова тайлов - нет.

Ниже приведены соответствующие разделы моего кода.

let myplayer;
class mainScene extends Phaser.State {

    constructor () {
        super({ key: 'mainScene' });
    }

    preload() {
        this.load.tilemap('map', 'client/maps/gameMap.csv');
        this.load.image('tileset', 'client/maps/tileMap.png');
    }

    create() {
        this.physics.startSystem(Phaser.Physics.P2JS);
        this.physics.p2.setImpactEvents(true);

        map = this.add.tilemap('map', 32, 32);
        map.addTilesetImage('tileset');

        layer = map.createLayer(0);
        layer.resizeWorld();

        map.setCollisionByIndex(10);
        map.setCollisionByIndex(405);
        map.setCollisionByIndex(403);

        map.setTileIndexCallback(405, this.hitHealth, this, 0);
        map.setTileIndexCallback(403, this.hitAmmo, this, 0);

        this.physics.p2.convertTilemap(map, layer);

        this.Wkey = this.input.keyboard.addKey(Phaser.Keyboard.W);
        this.Akey = this.input.keyboard.addKey(Phaser.Keyboard.A);
        this.Skey = this.input.keyboard.addKey(Phaser.Keyboard.S);
        this.Dkey = this.input.keyboard.addKey(Phaser.Keyboard.D);

        myplayer = new Phaser.Graphics(game);
        myplayer.beginFill(colour);
        myplayer.drawCircle(0, 0, 20);
        myplayer.endFill();

        game.physics.p2.enable(myplayer);
        myplayer.body.setCircle(10);
        myplayer.body.collideWorldBounds = true;
        game.world.add(myplayer);
    }

    update() {
            if (this.Wkey.isDown) {
                myplayer.body.moveUp(myplayer.speed);
            }
            if (this.Akey.isDown) {
                myplayer.body.moveLeft(myplayer.speed);
            }
            if (this.Skey.isDown) {
                myplayer.body.moveDown(myplayer.speed);
            }
            if (this.Dkey.isDown) {
                myplayer.body.moveRight(myplayer.speed);
            }
        }
    }

    hitHealth() {
        console.log("health hit");
    }

    hitAmmo() {
        console.log("ammo hit");
    }
}

var gameConfig = {
    type: Phaser.AUTO,
    width: 600,
    height: 600,
    parent: 'gameDiv',
    backgroundColor: '#f3cca3',
};

let game = new Phaser.Game(gameConfig);
game.state.add("main", mainScene);
game.state.start("main");

Что я делаю не так и как мне исправить это.

Заранее спасибо.

...