Estou criando um jogo no Flash AS3 no qual o jogador precisa modificar a terra para direcionar a água na direção certa.
No entanto, a simulação de água é um novo tópico para mim e estou meio que preso. Não precisa ser como água realista, com ondulações e outras coisas, mas precisa fluir e, se houver água suficiente, precisa subir.
Eu pensei em dois tipos diferentes de água:
- Fonte: Fonte infinita de água. Usado para simular mares e outras coisas.
- Bloco de água: Apenas uma unidade de água.
Minha implementação atual mostra como eu gostaria que a água se espalhasse, mas ela não sobe e não permite a água finita. Além disso, a propagação não é responsável por nenhuma quantidade de água, apenas se duplica ao invés de realmente mover unidades de água.
Estou curioso para saber como vocês resolveriam esse problema. Qualquer exemplo / pseudo-código é sempre apreciado.
Versão atual: http://dl.dropbox.com/u/319897/ProjectWater.swf Você pode manipular a terra pressionando o botão esquerdo do mouse. E pode simular um passo de água por vez, pressionando A.
Fonte da parte de água: http://pastebin.com/Js2kYt4y
Respostas:
Você precisa verificar autômatos celulares e, possivelmente, dinâmica de fluidos. Tarn Adams implementou um sistema de fluidos baseados em células no Dwarf Fortress, e essas são as ferramentas que ele afirmou usar em uma entrevista que li há algum tempo (e também em três dimensões, conforme o seu caso de uso). Penso que, para seus propósitos, autômatos celulares (auto-replicação / propagação de células de água) serão suficientes. Autômatos celulares são basicamente o que você vê no clássico jogo da vida de John Conway.
A comunidade de desenvolvimento roguelike tem uma tonelada de informações sobre esse tipo de coisa, porque esses jogos são inerentemente baseados em células. Acredito que exista uma lista de correspondência rec.games.roguelike em algum lugar no webz, onde você pode obter informações detalhadas.
Sugira também que você confira os vídeos do Voxeltron no youtube, um deles (existem apenas 2 ou 3) mostra lava líquida em movimento. Se você usasse subcubos pequenos o suficiente dentro de sua grade cúbica principal, poderia obter água não-bloqueada bem fria, usando ondas senoidais e similares para o movimento da superfície. Mais uma vez, para propagação, você usaria técnicas de autômatos celulares.
Para uma introdução às autoridades de certificação, verifique isso .
fonte
Uma boa abordagem pode ser uma inundação .
Uma dimensão de tempo pode ser facilmente adicionada, rastreando a quantidade nominal de água em cada célula e permitindo apenas a transferência de uma certa proporção de água a cada passo temporal da simulação. Essa proporção pode ser dividida igualmente entre as células vizinhas à base de água em um preenchimento pela respiração. Essa abordagem simples significa que a água enche as planícies e enche bacias e tal.
Se você quer jogar cânones ou rios de escultura como um efeito colateral de altas taxas de transferência de água, você pode criar um simulador de física psuedo divertido do lado que será agradável para os jogadores.
Artisticamente, isso lhe daria a oportunidade de colocar blocos de cascata se a água estiver transferindo na altura do terreno e tal.
Você poderia fazê-lo para que houvesse pias e fontes, e talvez a borda do quadro seja uma pia natural; caso contrário, uma fonte acabaria inundando o mapa.
fonte