Показать сообщение отдельно
  #3 (permalink)  
Старый 12.08.2018, 10:45
Интересующийся
Отправить личное сообщение для Arhitector Посмотреть профиль Найти все сообщения от Arhitector
 
Регистрация: 12.08.2018
Сообщений: 18

Сообщение от j0hnik Посмотреть сообщение
я так полагаю делаете используя обычные html элементы?
Нет, вся отрисовка на хостле canvas.
В принципе я немного продвинулся по этому направлению, написал для персонажа функцию нахождения дистанции объекта относительно персонажа и установил переменную с радиусом света, если дистанция больше, тогда поверх фона отрисовываю новый слой rgba(0,0,0,0.8) если же радиус меньше то добавляю легкое затемнение, вроде работает
var map = location.getMap("bg");

for (var i = 0 ; i < map.length; i++) {
    for (var j = 0; j < map[i].length; j++) {
        var x = (j * cellSize) + offset_map.x, y = (i * cellSize) + offset_map.y;
        
        if(character.getDistanseTo({x: x + (cellSize / 2), y: y + (cellSize / 2)}) 
                         >= character.getRadiusLight()) {
            ctx.fillStyle = "rgba(0,0,0,0.8)";
	    ctx.fillRect(x, y, cellSize, cellSize);
	}
	else {
	    ctx.fillStyle = "rgba(0,0,0,0.3)";
	    ctx.fillRect(x, y, cellSize, cellSize);
        }
    }
}

Но есть некоторые недочеты и тут так как вся система карты у меня построена на сетке 32х32 так и отрисовка немного "квадратная" получается...
Вот думаю как исправить.
Если кто подскажет красивую формулу вычета разницы между этими отступами и закрашивания соседних квадратов ровно по линии радиуса персонажа, буду безмерно благодарен!
Изображения:
Тип файла: jpg game-1.jpg (213.7 Кб, 16 просмотров)
Ответить с цитированием