Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Identificadores unicos

Iniciado por blau, 05 de Noviembre de 2012, 01:11:23 PM

« anterior - próximo »

blau

Buenas, estoy intentando implementar una gestión de identificadores únicos para mis instancias...

la idea es gestionar la carga/clonado desde ficheros xml y que no haya colisiones... es decir... tener un manager de id global... y para cargar tener otro... una vez realizada la carga/clonado y que están las referencias bien establecidas... lo traspaso al manager global...

lo he hecho así... http://pastebin.com/PhZUyV0z

.. pero no me termina de convencer... hay algún patrón de diseño o alguna forma mejor de hacerlo?

Gracias...

Vicente

No te vale utilizar GUIDs para los identificadores? Así te aseguras que no hay colisiones fijo.

chan

Muy buenas blau! cuánto tiempo!

¿Has pensado en meter el hash del tipo que estás registrando?, eso te asegura que generas un identificador único por cada objeto que tengas, y te ahorras el tener que controlar un contador a nivel estático.

[EX3]

Yo como dice Vicente, siempre que he necesitado crear identificadores únicos he usado GUIDs, que en tu caso, blau, estaras con .NET, es tan sencillo como hacer lo siguiente para generar una cadena con un identificador único:
System.Guid.NewGuid().ToString();

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

blau

@Vicente:

Lo de los Guids no lo conocia o no me acordaba... pero mi idea era añadiendo un sufijo a cada instancia de forma que sea visualmente reconocible.
Algo así como "map01#peasant#1" y pensaba obtener un hash de 32 bits de la cadena... porque dicen por ahi que aunque se puedan generar un mismo hash desde dos cadenas distintas la probabilidad es muy baja si se usan palabras de un diccionario.

@chan

eyy!!!... si q es verdad... hehehe...

Lo del hash lo estaba contemplando pero sobre la cadena que genero como nombre unico... aunque quizás con lo del guid me apañe... pq simplifico todo un monton...

Creo haré un diccionario global con el guid como hash, asociado a una estructura donde le asocie el mapa, la clase, y el numero de instancia de la clase... sip...

Vicente

Otra alternativa entonces es que las clases tengan un campo estatico llamado Id. Cada vez que haces un new de una clase, coges el valor de ese campo estático y lo incrementas. Eso te debería dar también valores únicos más humanos que un GUID :)

blau

Lo estoy haciendo recorriendo la colección y calculando el máximo del id... como es en tiempo de edición no me preocupa el rendimiento...
más que nada preguntaba por patrones de diseño para tener en cuenta el clonar una estructura con referencias a varios objetos...

Porque mis mapas se componen de habitaciones y cada habitación tiene sus instancias de diversos objetos, y lo que quiero es poder clonarlo o cargar instancias desde arquetipos de objetos compuestos, de forma que resolver las referencias a los nuevos objetos sea generico...

Loestoy implementando ahora... pero he decidido tener una pila de colecciones de identificadores... de forma que cada vez que quiera clonar/cargar algo, almaceno en la pila una nueva coleccion vacia... ejecuto la operacion de carga/clonado en un esa coleccion y cuando termino, desapilo y las instancias las paso a la coleccion inferior comprobando que no haya colisiones y en caso de haberlas cambiando los id... como las referencias las almaceno mediante una instancias de una clase... cambiar el identificador entero de instancia no me supone ningún quebradero de cabeza...

Los guid los voy a implementar en la parte de instancias del juego porque creo que me van a venir muy bien para mantener referencias en los savegames y para la persistencia de objetos a lo largo del juego...

Cuando lo pula un poco subiré el código y me lo despotricais... jejeje....









Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.