Hola, pues verán, últimamente he estado desarrollando un videojuego al estilo Terraria (no un clon), lo cual conlleva necesariamente un generador aleatorio de mapas (eso ya lo tengo resuelto :D ), un sistema de iluminación (lo tengo aún en perfeccionamiento :-[ ), y un verdaderamente gigantesco mapa (el problema ??? ).
Este gigantesco mapa es el que me ha estado provocando problemas, cuando es grande o mediano corre muy bien, pero "gigantesco" le da un FPS menor o igual a 10. Buscando en internet he encontrado una solución que considero temporal, consiste en desactivar todos los objetos que no estén en la visión del jugador, y me ha funcionado muy bien, pero, cuando haya agregado mas características al juego creo que me traerá muchos problemas.
¿Conocen alguna solución distinta?
Sin duda desactivar las instancias es la mejor opcion.
Que clase de problemas cree que te traeria est alternativa?
bueno, creo que tienes razón, lo que me preocupa es que, cuando ya tenga lista la física del agua y el jugador quiera drenar agua por ejemplo, solo podrá hacerlo mientras este al lado del agua, no va a poder irse y después regresar con el agua ya drenada.
Además, después pienso agregar multijugador, aún no se como funciona, pero pienso que sucederá algo como que los jugadores afuera de tu visión estarán desactivados y ocurrirán varias descoordinaciones entre los movimientos de los jugadores (ambas son suposiciones mías no estoy seguro que suceda así).
Gracias por responder, y perdona por no ser muy específico en esos "muchos problemas" que mencione.
Podrías hacerlo de otra forma aunque en la esencia es lo mismo, puedes hacerlo cómo esta en el minecraft por ejemplo, que a partir de una cierta distancia, los desactiva, tu podrías poner que si la distancia es mayor de tanto los desactive, así, aunque no funcione siempre lo de extracción, siempre y cuando no te alejes demasiado si funcionará
sin duda la desactivación es la mejor opción, no lo dudes. podrías darle más margen al agua, de forma que la agua solo se desactivase si estás realmente lejos, o poner una variable que controle el agua, aunque esto ya es más complicado...
en este tipo de juegos con muchas instancias debes de procurar que los objetos tengan poco código en el evento step, que es lo que realmente afecta al rendimiento :-[
espero que te haya ayudado ;)
salu2
Gracia Reyhuno y Darius por responder.
Ya había pensado algo parecido a lo que propones Darius, y ciertamente será algo complicado, quizá lo intente pero si no funciona, pienso activar todos los bloques que estén cerca del agua.
Reyhuno tu alternativa parece no muy prometedora, lo malo es que el programa calculará en cada step la distancia entre cada bloque y el jugador.
En el tema de multijugador, ¿alguien sabe si realmente vaya a afectar este script "Anti-lag" las funcionalidades en línea?.
No tienes porqué desactivar todos los objetos, tan solo desactiva aquellos que realmente no te hagan falta fuera de la vista del jugador.
En el tema multijugador, no debe afectar, cada uno juega en su pantalla. Si los dos estamos jugando online, por ejemplo, los objetos que se están desactivando en mi sesión no se van a desactivar en los tuyos. No TODO lo que ocurre en el juego es online.