Я работаю над созданием игры, которая перерисовывает холст каждый раз, когда игрок переходит в новую «комнату». В то время как большая часть функциональности есть, у меня возникают некоторые проблемы с игроком ... хотя остальная часть моего класса рисования комнаты Room сбрасывается и повторно инициализируется без ссылки на предыдущую комнату, квадрат игрока переносится на следующий экран и остается в том же месте.Сброс параметра класса в новом экземпляре этого класса: JS ES6
Мой класс Пользователь:
class User {
constructor(user, x, y, ctx) {
for (let metric in user) { this[metric] = user[metric]; }
this.initialX = x;
this.initialY = y;
this.ctx = ctx;
this.move = this.move.bind(this);
//// various other constructor things...
}
//// various other methods
move(e) {
//// motion description
if (this.y - 5 <= 0 {
init(theRoom.connectingRooms[0], this.x, 550) ///// should create a new box at the last player-x position and y-position 550
}
}
}
Мой класс номер:
class Room {
constructor(canv, room, player) {
for (let key in canv) { this[key] = canv[key]; }
for (let attr in room) { this[attr] = room[attr]; }
this.drawWalls();
this.player = player; /// adding player to room
} /// end of constructor
////methods, nothing that affects player
}
Initializer:
let init = function init(room, x, y) {
canv = document.getElementById('canvas');
canvas = new CanvasState(canv);
player = new User(user, x, y, canvas.ctx); //// it's remembering the last player I set instead of removing the old one & creating a new one
theRoom = new Room(canvas, room, player);
window.addEventListener('keydown', theRoom.player.move);
window.addEventListener('keyup', theRoom.typeInput);
};
Вы можете увидеть это on CodePen here. Соответствующие линии 10, 53, 185, 232. &
Я довольно новый для JS и очень новая для элемента холста, так что я уверен, что я делаю новобранец ошибку где-то здесь, но я не могу это описать.
Вы передаете один и тот же игровой объект более чем одному объекту комнаты? 'this.player' - это просто ссылка на объект игрока, который вы передали функции конструктора, чтобы начать с этого, поэтому, если вы передадите ссылку на один и тот же объект игрока более чем на одну комнату, вы получите несколько комнат со ссылкой на тот же игрок. – PMV
@ PMV Oh! Знаешь, ты прав, я. Это очень помогает. Благодарю. – JSilv