Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Programando videojuegos: Tutorial XNA Game Studio 4.0

Iniciado por wardamo, 09 de Junio de 2010, 11:47:40 AM

« anterior - próximo »

Vicente

Por cierto, respecto al gasto de memoria y de tiempo, lo que hay que hacer en estos casos, y es el camino hacia donde va .NET (ya lo apunta con LINQ) es que cuando actualices, en vez de modificar la lista actual, devuelves una nueva lista que tiene solo los objetos que han sobrevivido la actualización.

Esto por un lado te ahorra lo de las dos vueltas, pero por otro lado queda el "problema" de tener dos listas. Pero realmente la memoria que duplicas es ínfima porque lo que contienen las listas son referencias a los objetos, no los objetos en sí. Es decir, el famoso:

enemies.ForEach(x => x.Update());

Debería reescribirse correctamente como:

enemies = enemies.Where(e => { e.Update();  return e.IsAlive; }).ToList();

En la Xbox de todas formas lo mejor sería seguir usando un bucle for invertido (el primer código tiene el bug que comentábamos antes y tira una referencia a la basura, el segundo código es correcto pero tira dos referencias).

[EX3]

Cita de: Vicente en 10 de Julio de 2010, 01:06:00 AM
Por cierto, respecto al gasto de memoria y de tiempo, lo que hay que hacer en estos casos, y es el camino hacia donde va .NET (ya lo apunta con LINQ) es que cuando actualices, en vez de modificar la lista actual, devuelves una nueva lista que tiene solo los objetos que han sobrevivido la actualización.
Interesante. Tomo nota de esto ultimo :) Y ya que sacas el tema, que tal va el soporte LINQ en XNA? Lo implementaron en la ultima version si no ando desencaminado, no? De ser asi, rinde decentemente? Lo de poder usar LINQ para hacer consultas sobre las colecciones es un recurso que veo muy interesante para el tema de juegos (a mi ahora mismo en VB6.0 me vendria de perlas para lo que tengo montado).

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

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

Vicente

Estooo, LINQ va igual de bien en XNA que en un programa normal :p En PC no hay ninguna razón que justifique el no usarlo, en la Xbox tienes que tener en cuenta todas las referencias que el GC va a tener que recolectar (la nueva lista y las lambdas que pases a la query).

[EX3]

Perdon, se me olvido concretar. Que tal va en XBox360? En PC es ovbio que ira igual uses o no XNA :P

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

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

Vicente

En la Xbox también va bien, pero el problema es que normalmente genera mucha basura y matas al GC :(

blau

Cita de: Vicente en 10 de Julio de 2010, 12:40:24 AM
Cita de: blau en 10 de Julio de 2010, 12:18:27 AM
Sabia que tenia que existir...  :o estuve buscando y no lo encontre.   Tomo nota... :)

Me pasa igual que con el delegado Func, sabia que tenia que estar definido , al igual que Action y Predicate pero no lo encontraba hasta que lo vi en un código.

Ya, el framework es infinito :(

ObservableCollection no esta soportado para la Xbox360.  :(

Y en PC desde un proyecto XNA tampoco me aparece, aunque se supone que esta en System.dll ???


Vicente

Cierto, que raro, en XNA 4.0 (en Windows) se ve sin problemas. Viendo las referencias el VS2008 usa System del Framework 2.0 mientras que VS2010 usa System del Framework 4.0, pero en teoría por la documentación debería estar disponible para el Framework 3.0 y 3.5 (ya que es una parte fundamental de WPF...).

Raro, raro.

Vicente

Ya sé que ha pasado, en 3.5 esta clase estaba en WindowsBase.dll, pero en 4.0 la movieron a System.dll :)

Lord Destiny

Totalmente de acuerdo con Vicente, esos cambios harian el tutorial mucho mas legible y correcto, en cuanto a los comentarios para optimizar las cosas en XBOX (como los de WaaghMan) yo los pondira como opcionales en un recuadro de otro color con la advertencia de "Contenido avanzado" para que la gente que esta empezando y no tiene tanta idea de como compila por dentro .NET (o las diferncias entre los GC) no se pierda.

Al ser un tutorial las importante es que sea lo mas legible posible, por lo que te recomiendo que evites el uso de Lamda expressions, ya que la mayoria de la gente que usa .NET no las entiende ni de broma.


Ademas yo añadiria un: "Si todavia no has leido le capitulo N-1, te recomendamos que le eches un vistazo antes de seguir <link>" al principio de cada post y un: "Nuestro tutorial sigue en el capitulo N+1, a que estas esperando para leerlo <link>" al final de cada post.

Asi haces la lectura mas facil, ya que al estar en un blog entre muchos mas post, el lector pierde su precioso tiempo al tener que irlos buscando uno a uno (y puede que le de pereza y no los lea), ademas asi ganas que con cualquier enlace a cualquier parte del tutorial todos van a poder leerlo entero facilmente (muy util para referencias en otros blogs o para los resultados de los buscadores).

XÑA

Yo uso un montón LINQ para las bases de datos. Es otra forma de trabajar, lees todos los datos y luego haces las consultas en cliente. Va muy bien para informes grandes  :D

Eso sí es un traga memoria... :'(

Por cierto, muy chulo el blog, da gusto leer cosas en castellano  :P

Vicente

Esto, LINQ no es un traga memoria, si no todo lo contrario :p De hecho es una de sus ventajas, que consume mucha menos memoria que las formas tradicionales de operar con colecciones.

Lo malo es que con todas las lambdas genera bastante mini-basura para el GC.

XÑA

Corrijo, es un tragamemoria porque como no se mucho de LINQ a veces haga consultas y luego consultas sobre esas consultas... Si lo hago en menos 'subconsultas' seguro que no come tanto :P






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.