TypeError: this.physics не определен в пользовательских функциях - PullRequest
0 голосов
/ 08 июля 2019

Все функции, которые я создал, дают эту ошибку.

Некоторое время назад я запустил игру-стрелялку. Когда я начал это, я использовал Phaser 2. Я решил продолжить разработку и надеюсь закончить эту игру. После того, как Phaser 3 был полностью выпущен, я подумал, что это будет хороший момент для миграции и изучения различий.

Я попробовал пару решений. 1. очень уродливое решение, я включил это во все параметры при вызове функции. Я уверен, что это не способ сделать это. 2. Я добавил все пользовательские функции в список сцен в конфигурации.

var config = {
    type: Phaser.AUTO,
    width: 1050,
    height: 900,
    physics: {
        default: 'arcade',
        arcade: {
            gravity: { y: 0 },
            debug: true
        }
    },
    scene: {
        preload: preload,
        create: create,
        update: update,
        render: render,
        stopBall: stopBall,
        spawnBalls: spawnBalls,
        getBallType: getBallType,
        getNewBall: getNewBall,
        getGridPos: getGridPos,
        clearConnectedBalls: clearConnectedBalls
    }
};

var game = new Phaser.Game(config);

function preload() {
    this.load.image('arrow', 'assets/img/arrow.png');
    this.load.image('pokeball', 'assets/img/pokeballs/pokeball.png');
    this.load.image('greatball', 'assets/img/pokeballs/greatball.png');
    this.load.image('masterball', 'assets/img/pokeballs/masterball.png');
    this.load.image('premierball', 'assets/img/pokeballs/premierball.png');
    this.load.image('safariball', 'assets/img/pokeballs/safariball.png');
    this.load.image('ultraball', 'assets/img/pokeballs/ultraball.png');

}

function create() {
    // Fuction called after 'preload' to setup the game 
    ballGrid = this.add.group();
    ballGrid.enableBody = true;
    ballsToShoot = [];
    levelGridArray = {...}
    }
    //active mouse
    this.input.mouse.capture = true;

    getNewBall(this);

 }

function update() {
    // Function called 60 times per second
    this.physics.world.collide(currentBall, ballGrid,function(){
        stopBall(this, currentBall)
    })
    //aiming arrow

    //shooting pokeball

}


function stopBall(test, currentBall) {
    currentBall.body.velocity.x = 0
    currentBall.body.velocity.y = 0
    ballGrid.add(currentBall)
    getGridPos(test, currentBall.x, currentBall.y);

    currentBall.body.immovable = true;

    getNewBall(this)
}

function getNewBall() {

    if (typeof currentBall !== 'undefined') {
        currentBall.destroy()
        currentBall = secondBall;
        currentBall.x = 8 * 60;
        currentBall.y = 14 * 60;
        secondBall.destroy()
    } else {
        currentBall = this.physics.add.sprite(8 * 60, 14 * 60, getBallType())
        currentBall.disableBody(false, false);
    }
    secondBall = this.physics.add.sprite(1 * 60, 14 * 60, getBallType())
}

Функция stopBall имеет параметр this. Я удалил параметр для getNewBall (), чтобы показать, где ошибка показывает свое лицо.

http://cihantasdelen.com/bubble2/ Здесь вы найдете игру.

Я надеюсь, что кто-то может объяснить мне, почему возникает эта ошибка.

...