Estou tentando implementar um efeito de iluminação em um jogo HTML5 / JavaScript usando a substituição de blocos. O que tenho agora é meio que trabalho, mas as transições não parecem suficientemente suaves / naturais à medida que a fonte de luz se move. Aqui está onde estou agora:
- No momento, tenho um mapa de plano de fundo que possui uma planilha PNG de espectro de luz / sombra aplicada, passando do azulejo mais escuro ao transparente. Por padrão, o bloco mais escuro é desenhado em todo o nível no lançamento, cobrindo todas as outras camadas, etc.
- Estou usando meus tamanhos predeterminados de bloco (40 x 40px) para calcular a posição de cada bloco e armazenar suas coordenadas xey em uma matriz.
- Em seguida, estou gerando uma entidade "bloco de grade" transparente de 40 x 40px em cada posição na matriz
- O mecanismo que estou usando (ImpactJS) permite calcular a distância da minha entidade de fonte de luz a todas as instâncias dessa entidade de bloco de grade.
- Posso então substituir o ladrilho embaixo de cada um desses ladrilhos de bloco de grade por um ladrilho da transparência apropriada.
Atualmente, estou fazendo o cálculo como este em cada instância da entidade do bloco de grade que é gerada no mapa:
var dist = this.distanceTo( ig.game.player );
var percentage = 100 * dist / 960;
if (percentage < 2) {
// Spawns tile 64 of the shadow spectrum tilesheet at the specified position
ig.game.backgroundMaps[2].setTile( this.pos.x, this.pos.y, 64 );
}
else if (percentage < 4) {
ig.game.backgroundMaps[2].setTile( this.pos.x, this.pos.y, 63 );
}
else if (percentage < 6) {
ig.game.backgroundMaps[2].setTile( this.pos.x, this.pos.y, 62 );
}
// etc...
O problema é que, como eu disse, esse tipo de cálculo não faz a fonte de luz parecer muito natural. A mudança de lado a lado parece muito nítida, enquanto, idealmente, eles entrariam e sairiam suavemente usando a folha de espetro (copiei a folha de outro jogo que consegue fazer isso, por isso sei que não há problema com as tonalidades dos ladrilhos.) como o outro jogo está fazendo isso). Eu estou pensando que talvez meu método de usar porcentagens para trocar de lado a lado possa ser substituído por um fórum de proximidade melhor / mais dinâmico de algum tipo que permita transições mais suaves? Alguém pode ter alguma idéia do que eu posso fazer para melhorar o visual aqui, ou uma maneira melhor de calcular a proximidade com as informações que estou coletando sobre cada bloco?
(PS: Estou reeditando isso do Stack Overflow por sugestão de alguém, desculpe pela duplicação!)