Spore 2D (Animalicos)

Started by Windgate, May 17, 2009, 05:17:32 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

splinter_work

son 1024 procesos... donde hacen 1,048,576 de chequeos unos contra otros... claro, creo que es un poco pesado...

algo se me va a ocurrir para estos casos... ahora no tengo tiempo, pero tengo una idea en la cabeza... a ver que sale...

Windgate

Ese archivo que dices probablemente sea basura, ahora lo borro.

Sí, había calculado alrededor de 1M de operaciones por FRAME, una barbaridad y algunos usan collision() más de una vez por FRAME... Inviable.

Sorpréndeme con tu idea, habíamos hablado de usar una matriz/tablero que corresponda con la resolución de pantalla y almacene el/los IDs de proceso que actualmente se encuentran en ese pixel/celda en cuestión.

Sin duda más eficiente, cada proceso pasa de hacer NxN comprobaciones a hacer Nx9 comprobaciones. Y como generalmente N es estrictamente mucho mayor que 9, más no se puede pedir.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

splinter_work

#17
Basicamente pensaba en probar algo parecido a eso, donde cada objeto incremente un contador segun su tipo... o sea, x9... pero no necesariamente del tamaño de la pantalla, porque representaria que cada objeto tenga que actualizar direferentes celdas...
quizas dividiria la pantalla en X celdas que no son necesariamente los pixels... digamos dividirla por 8 o 16 (lo que nos daria la cantidad de celdas, por ejemplo, 640/8=80 celdas, podemos usar un valor inferior si queremos), y hacer las dimensiones de dicha matriz del resultado de esto... tomar como base de seteo al centro del grafico o punto de control 0 (o algun otro, que podramos definir como una suerte "boca").
Por otro lado, asignarle prioridad a los procesos en base a su orden en la cadena alimenticia... de esta forma estariamos ejecutando/seteando aquellos procesos que tienen un valor menor en dicha cadena...
La idea basica es incrementar contador segun posicion del objeto o nacimiento... decrementar contador en base a cuando se mueven o cuando son comidos... si el contador para el tipo de celda que corresponda a un animal de tipo posible elimento es mayor a cero, significa que puede ser comido.

Esa es basicamente la idea, si te animas a hacerlo bien... sino luego lo hago yo como experimento, a ver que sale.

Con esto se evita recorrer todos los procesos (1024 chequeos por cada proceso), y nos limitamos a trabajar recorrer solo 9 contadores (9 chequeos por cada proceso).

Deberia funcionar y deberia ser mucho mas rapido.

Windgate

Es cierto, si el tablero fuese del tamaño de la pantalla deberían actualizar varias celdas, eso que dices de la "boca" de cada animalico es buena idea, por ahí es por donde habría que avanzar, lo que está claro es que hace falta un tablero.

Pero... He mirado tu código y tengo una duda demasiado TRASCENDENTAL. He visto cómo hacías uso de public, de forma que los procesos animalico pasan a tener una variable "local" que es el tipo, y a partir de su ID es posible acceder a ella...

Me recuerdan a las "sucias" variables local de Fénix, pero pensaba que Bennu ya no incorporaba ese tipo de cosas...

¿¿¿Es posible entonces que un proceso tenga variables "public" accesibles a través de su ID??? Estoy alucinando muchísimo :o :o :o

Quizá os suene noob pero pensad que provengo de Fénix habiendo pasado por DIV años antes... Eso de public me abre una abanico de posibilidades... Infinito...
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

splinter_work

public son variables locales, pero solo del/para ese tipo de proceso.
pueden ser accedidas por su id, pero la variable que contiene dicho id debe estar declarada como "tipo proceso" al cual queremos acceder, es como si un proceso se transformara en un "type".
para accederlas hay que tener el codigo del proceso escrito antes de su uso o declararlas como esta en el ejemplo.
No recuerdo que version, pero esto fue algo que incorpore en Fenix hace tiempo, creo que fue una de las primeras cosas que hice cuando me hice cargo de fenix, por no decir que fue la primera.
Saludos.

Windgate

No fuí capaz de saber que existía en Fénix...

Necesito un tiempo para asimilarlo, en serio te lo digo.
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

Windgate

Te doy un Karma porque no puedo darte un beso :-*
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

DCelso

 :o. Qué sería de mí sin los public :D.
Así un proceso se asemeja más a una clase y tal :D.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/

splinter_work

jejeje, te agradezco lo del beso, pero paso... mas con esa clase de besos que representa ese emoticon...

laghengar

Creo que hice algo de eso en una estrategia que empecé (que por supuesto lo trabajé poco). A ver si lo veo y lo cuelgo.

Necesité una matriz global, pero hay que pensar que la matriz sería
  • [y] y claro, cuando los valores que guarda son las id, el resultado es una matrix enorme en memoria.

    Es mucho mejor así, pero está ese problema de memoria aunque mejor idea sería una matriz dinámica que no se si alguien lograría hacerlo.
!!!Blender Blender Blender yuhuuuuuuu¡¡¡ novato o_O

splinter_work

#25
Cuidado que yo no dije de guardar ningun id... solo incrementar una celda segun el tipo...
Seria una matriz tridimencional... donde cada x,y tendria una z que corresponderia a la cantidad de animales/especies... cada una de estas z, totalizaria la cantidad de individuos de dicha especie que esten en dicha celda...
y lo demas es simple deduccion...
podriamos decir, celda/region.

edit: pongan los karma en mi otro usuario, no en este que es una especie de usuario temporal.

edit2: me olvide que si necesitare el id para el caso de matar a un proceso... pero bueno, vamos a pensar algo al respecto...

Windgate

Matriz dinámica... Sólo una vez me hicieron programar una durante la carrera y todavía odio mucho a ese profesor >:(

El tamaño de una matriz de IDs no lo veo tan alarmante, ¿Cada ID ocupa lo que ocupan las variables locales y públicas de cada proceso, no?. Es más, es por donde estoy continuando con el proyecto.

Ahora mismo he combinado la versión de SplinterGU y la mía incorporando los public y consiguiendo que todos los animalicos sean el mismo proceso, así que Splinter no avances mucho o nos comeremos terreno de forma bastante improductiva...

Ya sé lo de tus 2 usuarios, pero semejante aporte que me has dado merecía un Karma para el temporal splinter_work. ¿Piensas fusionar a SplinterGU y splinter_work en uno sólo en el foro o algo así?
Iván García Subero. Programador, profesor de informática, monitor de actividades culturales y presidente de TRINIT Asociación de Informáticos de Zaragoza. http://trinit.es

splinter_work

Este usuario es para no usar mi password en lugares "publicos".

Por otro lado, ya tengo el codigo cambiado con todas estas ideas, y creo que encontre un bug en el compilador... con respecto a las variables, pero no se si es un bug o si es problema del tamaño... ya lo vere e informare...

Saludos.

splinter_work

Increible, el esquema funciona a la perfeccion... a la primera compilacion... tarda mucho en compilar por el tema del tamaño de la matriz estatica... reduje los valores de la misma, y el compilador ahora va...
Vere de cambiarlo a una array dinamico, pero con la cantidad de dimensiones (4) me temo que se hara un poco complejo las operaciones de calculo para obtener el puntero a donde trabajar... o quizas no... bueno, todo es cuestion de probar...

DCelso

Sois unos monstruos, killo me quedo anonarado con lo que sabeis, no sé de qué diablos hablais pero suena a complejo que te cagas.
Monstruos Diabólicos

"A PAck of classic GAMEs For BennuGD" en desarrollo
http://code.google.com/p/apagame4be/