#javascript #node.js #server #client
#javascript #node.js #сервер #клиент
Вопрос:
У меня есть игра node js, в которой я использую функцию для генерации вектора направления поиска к моему игроку. Проблема в том, что я использую установленный интервал для постоянного обновления этого вектора, а также других данных по мере перемещения моего проигрывателя на стороне клиента. Я рассматриваю возможность генерации этих векторов через каждый интервал для более чем 100 врагов. Есть ли какой-либо способ, которым я мог бы сделать весь этот процесс лучше? Я думал о событии, но я не знаю, на какое событие отреагирует вражеский ИИ, поскольку позиция игрока должна постоянно обновляться для работы функции поиска на стороне сервера.
setInterval(function () {
let seekList = [];
let enemyIndices = [];
for (let i = 0; i < amountOfEnemyLeaders; i ) {
let index = mainEnemies[i];
seekData = calculateSeek(lobbyObjs[lobbyCode].enemies[Object.keys(lobbyObjs[lobbyCode].enemies)[index]], players[socket.id]);
if (seekData !== undefined) {
lobbyObjs[lobbyCode].enemies[Object.keys(lobbyObjs[lobbyCode].enemies)[index]].sprite.x = seekData.movement.x * 10;
lobbyObjs[lobbyCode].enemies[Object.keys(lobbyObjs[lobbyCode].enemies)[index]].sprite.y = seekData.movement.y * 10;
seekList.push({x: lobbyObjs[lobbyCode].enemies[Object.keys(lobbyObjs[lobbyCode].enemies)[index]].sprite.x, y: lobbyObjs[lobbyCode].enemies[Object.keys(lobbyObjs[lobbyCode].enemies)[index]].sprite.y});
enemyIndices.push(mainEnemies[i]);
}
}
io.in(lobbyCode).emit('applyEnemyMovement', seekList, enemyIndices, lobbyObjs[lobbyCode].enemies);
}, 50);
Комментарии:
1. единственное, что вы можете сделать, это переместить эту строку перед циклом
Object.keys(lobbyObjs[lobbyCode].enemies)
2. @aRvi Да, я этого не уловил. Спасибо! Тем не менее, проблема с задержкой все равно будет… вы бы порекомендовали убрать установленный интервал? Я не совсем уверен, как я мог бы постоянно обновлять это без задержек, имея возможность обрабатывать многих пользователей.
3. Если я уберу установленный интервал, он должен быть основан на событиях. Я не совсем уверен, как я это сделаю, потому что я хочу, чтобы враги постоянно искали игрока, и поскольку это игра, в которой игроки будут много перемещаться, на самом деле нет другого события, кроме начала движения игрока, которое не поможет, если игрок постоянно перемещается.
4. вам следует рассмотреть возможность использования очередей обмена сообщениями, сокетов
5. Я уже использую socket.io . Должен ли я это изменить?