Я использую Lance для игры, в которой область игрового процесса представляет собой мозаичную карту. Когда игрок нажимает клавишу со стрелкой влево, его персонаж должен переместиться на одну плитку влево и т. д. Я попробовал два подхода, см. ниже, но ни один из них не сработал.
Можно ли изменить любой подход для работы с движением на основе тайлов? Или нужен третий подход? Или Лэнс не подходит для такой игры?
Подход 1: регулируйте положение игрока непосредственно при нажатии клавиши. Из моего класса GameEngine:
if (inputData.input == 'left') {
player.position.x -= 32;
player.angle = 180;
}
Хотя это хорошо работает для одиночной игры, это не работает в многопользовательской игре. Когда игрок A перемещается, его позиция не обновляется на экране игрока B.
Подход 2: установить состояние игрока при нажатии клавиши:
if (inputData.input == 'left') {
player.state = 'walkLeft';
}
Затем добавьте обработчик postStep
в общий класс GameEngine. (Добавление в плеер не помогло). Этот код поворачивает игрока (за много шагов) лицом на 180 градусов, а затем ускоряет игрока в этом направлении:
onPostStep(event) {
let players = this.world.queryObjects({instanceType: Player});
players.forEach(player => {
if (player.state == 'walkLeft') {
if (Math.abs(player.angle - 180) > 2)
player.turnLeft(2);
}
else {
player.accelerate(1);
player.state = '';
}
}
})
}
При таком подходе, если игрок нажимает клавишу со стрелкой влево, его угол сначала изменяется, как и ожидалось, но ускорение и движение хаотичны. Кроме того, положение игрока А на его экране отличается от положения на экране игрока Б.
Демонстрация Spaaace является основой для моего проекта, поэтому в моем проекте используются те же изгибы, физический движок и т. д.
Первый подход лучше. Игра Скандалист из коллекции примеров делает именно то, что вы описываете. Вы можете посмотреть код BrawlerGameEngine.js
в https://github.com/lance-gg/tinygames/tree/master/бравлер
Убедитесь, что действие обрабатывается в методе
GameEngine::processInput(inputData, playerId)
А, я не видел игру Brawler. Это лучшая база для того, что я пытаюсь построить. Спасибо за подсказку, Гэри!
вы также можете пропинговать сопровождающих проекта lance на слабом канале, они могут помочь