Если я пытаюсь сделать плеер, я мог бы сделать это так
let player = game.add.sprite(100, 100, 'player');
player.speed = 4;
player.gravity = 1;
Я мог бы превратить это в функцию-конструктор, подобную этой
let player = new Player(100, 100);
function Player(x, y) {
this = game.add.sprite(x, y, 'player');
this.speed = 4;
this.gravity = 1;
}
назначение this.speed и this.gravity работает нормально, но назначение this возвращает Uncaught SyntaxError: Invalid left-hand side in assignment
Вы не можете присвоить значение this
.
Используйте this.sprite = game.add.sprite(x, y, 'player');
. Вы не можете изменить / назначить this
. В конце концов ваш Player
может расширить прототип спрайта Phaser, например: class Player extends Phaser.Sprite {
Вы хотите, чтобы у Player
был «спрайт» или это был «спрайт»?
Если Player
— это спрайт, возможно, лучше создать функцию, которая возвращает новый спрайт, а не конструктор, возвращающий объект Player
, который является спрайтом.
Если вы действительно хотите, чтобы сделать это, вы можете сделать что-то вроде этого
function Player(x, y) {
let p = game.add.sprite(x, y, 'player');
p.speed = 4;
return p;
}
let player = new Player(100, 100);
НО два вопроса, зачем вы хотите это сделать? а какую версию фазера вы используете? Могут быть лучшие решения, такие как наследование/расширение.
Для Phaser CE/2: оформите заказ этот пример официальный пример
Для Phaser 3: оформить заказ этот пример официальный пример
Вам придется адаптировать примеры к вашему конкретному случаю, но они показывают, как это может работать.
Попробуйте что-то вроде "this.sprite = game.add.sprite(x, y, 'игрок');".