Estou construindo um servidor de jogo MMO para um jogo 2D e atualmente estou implementando a detecção de colisão e gostaria de saber o que devo fazer.
Digamos que eu tenho 1000 jogadores jogando e 10.000 objetos, devo apenas iterar sobre todos eles para determinar se colidimos? Isso parece um pouco caro.
Eu poderia separar o mundo em partes e iterar todos os objetos de cada jogador em sua parte.
Eu gostaria de saber algumas outras idéias ou o que é padrão. Qual é a melhor maneira para um servidor MMO lidar com a detecção de colisão static objects
?
collision-detection
mmo
server
Patrick Lorio
fonte
fonte
Respostas:
O mundo sendo separado em partes é realmente o primeiro passo que você deve dar, com cada parte sendo tratada separadamente.
Objetos estáticos ? Puramente estático no sentido de que eles nunca se movem e nunca desaparecem? Em seguida, você pode simplesmente incorporar esses objetos em qualquer estrutura de dados que estiver usando para a navegação de jogadores no mundo (como uma grade , malha de navegação ou gráfico de visibilidade ). Não é necessário fazer nenhuma detecção de colisão individual. Isso pode ser feito manualmente pelos projetistas ou automaticamente pelo mecanismo como uma etapa de pré-processamento do pipeline de conteúdo.
Se, por outro lado, você deseja realmente executar a detecção de colisão entre entidades dinâmicas dentro de cada pedaço, dependendo da quantidade esperada de entidades simultâneas, você pode se beneficiar do uso de uma estrutura de dados de particionamento espacial (como um quadtree ou uma grade ) para reduzir a quantidade de entidades que precisam ser iteradas. Em geral, pesquise o tópico mais amplo da detecção de colisão em fase ampla (sem trocadilhos), que inclui as técnicas de divisão espacial mencionadas, além de outras abordagens, como varredura e poda .
fonte