Проблема, с которой вы столкнулись, скорее всего, связана с использованием ground.onload для запуска рендеринга кадра. Когда вы загружаете вторую карту, обработчик события onload перезаписывается, что заставляет первую карту отрисовываться, используя состояние второй карты.
Возможное решение этой проблемы - обернуть логику функции frame в закрытие, чтобы она могла перехватывать собственное состояние и сохранять его даже после перезаписи обработчика события onload. Это можно сделать, определив функцию frame внутри другой функции, которая ее возвращает.
Вот пример того, как можно реализовать это решение:
function createMap(ground) {
let state = {...}; // Initial state for the map
function frame() {
// Render the frame using the state captured by the closure
// ...
// Request the next animation frame
requestAnimationFrame(frame);
}
ground.onload = frame;
}
// Use the createMap function to create two maps
let ground1 = new Image();
createMap(ground1);
let ground2 = new Image();
createMap(ground2);
При таком решении каждый вызов createMap создает отдельный экземпляр функции frame со своим собственным состоянием, поэтому состояние одной карты не будет влиять на состояние другой карты.
Байкер йиксмайамГуру (4117)
1 год назад
Я примерно так и делал, не работает. с разными переменными для картинок не пробовал, я просто уже сущетсвуещей ground добавлял новое значение. С двумя тоже пробовал, и не работает. А ещё по моему эти функции работают параллельно, и return не остановит. Я имею в виду, что если в локации есть предмет, при нажатии на который что-то происходит, то на второй локации, где его нету, происходит то же самое что должно происходить, я с помощью флагов нажатие исправил, но они всё равно паралелльные, и ретурн не останавливает
ground.onload = frame
где фрэйм это отрисовка кадра. Как это исправить?