Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Menu

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menu

Temas - blau

#41
General Programadores / Instanciando Genericos
19 de Septiembre de 2010, 05:51:43 AM
Ufff, el ultimo obstaculo ... a ver...

Tengo una clase generica

public class Keyframe<T> where T : struct
    { ... }

y tengo un problema para instanciarla por reflexion:

tengo una cadena de texto con el tipo base ("Components.Scene.Sequences.Animators.Keyframe")
y otra cadena de texto con el argumento generico ("Microsoft.Xna.Framework.Vector2")

y no veo manera de instanciar desde ahi ¿a alguien se le ocurre alguna idea?

   


#42
En todos lados dice que es posible mediante reflexion, pero yo no lo consigo...

Cuando hago esto:

Código (csharp) [Seleccionar]
objecto.GetType().GetMethods(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)


no me devuelve los metodos privados y deberia por que si no para que %·%&  esta el BindingFlags.NonPublic,

¿alguna idea?

aunque lo estoy haciendo de una clase heredada, voy a probar desde el tipo de la clase base.

#43
XNA / Spermatozoon Attack
11 de Septiembre de 2010, 01:21:38 AM
Estoy organizando carpetas y creando los repositorios, y me ha aparecido otro juego de esos que están al 90% del desarrollo, pero que el 10% que queda consume el 90% del tiempo.

http://www.youtube.com/watch?v=mlnYwS2bxJU

Me queda que gestionar el multiplayer, la idea es hacer un versus, en el que haya un tiempo limite y la puntuacion otorgada venga en funcion del numero de intentos y el tiempo que reste para el nivel. Pero el problema estaba en equilibrar las posiciones de los espermatozoides para ser justos con todos los jugadores.

Aunque ahora mismo creo que ante la injusticia puede generarse pique.  >:D 

A ver si un día de estos lo termino.
#44
XNA / Editor 2D
10 de Septiembre de 2010, 11:10:32 PM
Esto es una prueba del sistema de transformaciones que estoy haciendo dentro de un editor para un juego de plataformas.

http://www.youtube.com/watch?v=K9R5v5Va4CI

La idea no era hacer una animacion esqueletal, sino disponer de un sistema de transformaciones editable y sencillo para mover plataformas, objetos, .... pero como a mi hermano se le ha metido en la cabeza animar un robot que tenia hecho a pilot, pues que mejor momento para probarlo. :)

La filosofia del editor/engine o como se le quiera llamar, es entidad componente, de forma que he implementado componentes con una funcionalidad muy definida que van a aportando caracteristicas a la entidad a la que pertenecen.

Todavia esta todo muy verde pero se va progresando.

Por cierto, es la primera animacion que hago en mi vida asi que no me saqueis muchas pegas de estilo. :P


#45
General Programadores / Expressiones Lambda
10 de Septiembre de 2010, 12:00:20 PM
Estoy  haciendo un parser para intercambiar los datos a/desde  xml.

He definido un atributo y quiero pasar una funcion que convierta los valores de la variable que quiero guardar.

public class XmlableAttribute : Attribute
    {
        public string Name { get; private set; }
        public Func<object, object> Converter { get; private set; }
       
        public XmlableAttribute() : this("") { }
       
        public XmlableAttribute(string Name)
        {
            this.Name = Name;
            this.Converter = (v => v);
        }

        public XmlableAttribute(string Name, Func<object, object> ValueConverter)
        {
            this.Name = Name;
            this.Converter = ValueConverter;
        }
}

La idea es poder guardar el identificador y no el objeto en si, de esta manera:

[Xmlable("Transformacion", (t => (t as Transform2D).IdData)) ]
public Transform2D Transform { get; private set; }

El problema es que el compilador me dice:  "Expression cannot contain anonymous methods or lambda expressions"

No entiendo por que no me deja hacerlo así, las funciones de Linq toman parametros Func<T,Q> con expresiones lambda sin problemas.

¿Alguna idea?


#46
XNA / Error de compilación ¿absurdo?
26 de Agosto de 2010, 10:05:50 PM
No entiendo este error:

Error   3   Argument '1':

cannot convert from 'System.Predicate<Q> [c:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll]'
                               to 'System.Predicate<Q> [c:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll]'   

Solo he definido esto sobre una List<Q>:

public bool Exists<Q>(Predicate<Q> predicate)
{
           return Items.Exists(predicate);
}

¿Alguna idea concreta sore por que se produce este error?
#47
XNA / Problema con transformaciones
14 de Agosto de 2010, 01:15:14 PM
Buenas, estoy implementando haciendo un editor para un juego de plataformas 2D, y me ha surgido un problema con los gizmos.

He implementado un sistema basado en entidades/componentes, ahora mismo hay hechos dos tipos de componentes,
el sprite para ser dibujado, y la transformacion del sprite.  Las transformaciones pueden ser jerarquizadas en un estructura de arbol.
Todo esto funciona bien, los sprites se dibujan correctamente conforme voy actualizando las transformaciones de las que dependen.

Donde tengo el problema,el problema esta en que el gizmo que uso para rotar,escalar y trasladar con el raton, no entiendo por que motivo no lo hace correctamente.

La unica diferencia esta en que el sprite lo dibujo con el spritebatch, y la ultima transformacion la aplica el spritebatch, y en el gizmo me voy  directamente a la transformacion absoluta para generar los ejes y pintarlo a pelo con un drawuserprimitives para las lineas y con un spritebatch sin aplicarle matriz de transformacion para los cuadraditos de seleccion.


Bueno, pongo codigo, este es mi manager de transformaciones, tengo varios tipos de transformaciones, porque las he clasificado, en tres segun pueden tener padre y si van a necesitar calcular sus matrices o no, pero la que nos atañe es esta:

Código (csharp) [Seleccionar]

public class Bone2DManager : Transform2DManager
   {
       public static readonly Bone2DManager DefaultManager = new Bone2DManager();

       List<int>[] Children;

       Set<int> DirtyDataLocal = new Set<int>();
       Set<int> DirtyDataAbsolute = new Set<int>();

       int BuildCount = 0;

       Bone2DManager()            
       {
           Children = new List<int>[Transforms.Length];
           for (int i = 0; i < Transforms.Length; i++)
           {
               Children[i] = new List<int>(1);
           }
       }      

       public override void Draw(GameTime gametime) { }

       public override void Update(GameTime gametime)
       {
           BuildCount++;
           // Local transform
           foreach (int index in DirtyDataLocal)
           {
               if ( Transforms[index].BuildMode == BuildModes.Translation)
               {
                   Transforms[index].Local.M41 = Transforms[index].Position.X;
                   Transforms[index].Local.M42 = Transforms[index].Position.Y;
               }
               else
               {
                   Transforms[index].Local =
                       Matrix.CreateScale(Transforms[index].Scale, Transforms[index].Scale, 1)
                       * Matrix.CreateRotationZ(Transforms[index].Rotation)
                       * Matrix.CreateTranslation(Transforms[index].Position.X, Transforms[index].Position.Y, 0);
               }
           }

           DirtyDataLocal.Clear();

           // Absolute transform
           foreach(int index in DirtyDataAbsolute)
           {                
               RecursiveBuildAbsoluteMatrix(index);
           }

           DirtyDataAbsolute.Clear();
       }

     
       /// <summary>
       /// Hace una busqueda en profundidad hasta encontrar a su padre, y a la vuelta va actualizando las matrices absolutas
       /// y marcando las que ya estan actualizadas
       /// </summary>
       /// <param name="index"></param>
       /// <param name="Absolute"></param>
       void RecursiveBuildAbsoluteMatrix(int index)
       {

           if (Transforms[index].BuildId == BuildCount) return;   // Si este nodo ya esta calculado nos salimos
           
           int Padre = Transforms[index].ParentId;     // Obtenemos el identificador del padre
   
           if (Padre == Global.InvalidMatrixIdTransform2D)              // Si no hay padre la matriz absoluta es la local
           {
               Transforms[index].Absolute = Transforms[index].Local;
               Transforms[index].BuildId = BuildCount; // Marcamos el nodo como construido
               return;
           }

           // Si el padre esta sucio
           if (DirtyDataAbsolute.Contains(Padre))
           {
               RecursiveBuildAbsoluteMatrix(Padre);  // Probamos a construir la matriz del padre
           }

           // Construimos la matriz absoluta
                       
          Matrix.Multiply(ref Transforms[index].Local, ref Transforms[Padre].Absolute, out Transforms[index].Absolute);

           Transforms[index].BuildId = BuildCount;     // Marcamos la matriz absoluta como construida
       }


Esto pertenece al Sprite2DManager, y es la funcion que se encarga de pintar sprites,
basicamente se ordena todo por layer, por bone de trasnformacion para agrupar las llamadas al spritebatch, y luego se pintan los sprites agrupados por textura.

Código (csharp) [Seleccionar]

public void Draw(GameTime gameTime)
       {
           for (int LayerId = 0; LayerId < (int)RenderLayer.Count; LayerId++)
           {
               foreach (int BoneId in LayersToBoneIds[LayerId])
               {
                   Matrix World = Transforms.Transform2DManager.Transforms[BoneId].Absolute;
                   //!!!-----¡¡¡¡
                   // Habria que establecer los parametros de renderstate segun la capa
                   //!!!-----¡¡¡¡
                   Batch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.None, World);
                   
                   int BoneLayerId = BoneId | (LayerId << 16);                 // Esto permite que un bone pueda contener sprites de distintas layers
                   int IndexGroup = BoneIdToGroupList[BoneLayerId];            // Obtenemos la lista de sprites agrupada por textura
                   List<Sprite2D> group = GroupList[IndexGroup];               // Obtenemos la lista de sprites agrupada por textura
                   
                   foreach (Sprite2D sprite in group)
                   {
                       Batch.Draw(sprite.Texture, sprite.Transform.Position, null, Color.White, sprite.Transform.Rotation, sprite.Origin, sprite.Transform.Scale, SpriteEffects.None, 1);
                   }

                   Batch.End();
               }
           }
       }


Y este codigo es el que pinta el gizmo:
Código (csharp) [Seleccionar]

      const float Distance = 25;

       Vector2 ObjectAxisX = Vector2.UnitX * Distance;
       Vector2 ObjectAxisY = Vector2.UnitY * Distance;

public override void Draw(GameTime gameTime)
       {
           Transform2D Transform = EditorComponent.Instancia.Selected as Transform2D;

           if (Transform == null) return;

           // Lineas
           Lineas.Instancia.AddLine3D(Transform.AbsoluteMatrix, new Vector3(ObjectAxisX.X, ObjectAxisX.Y, 0), Vector3.Zero, Color.Red);
           Lineas.Instancia.AddLine3D(Transform.AbsoluteMatrix, new Vector3(ObjectAxisY.X, ObjectAxisY.Y, 0), Vector3.Zero, Color.Green);
           
           Vector2 PosX, PosY, PosXY;

           PosX = Vector2.Transform(ObjectAxisX, Transform.AbsoluteMatrix);
           PosY = Vector2.Transform(ObjectAxisY, Transform.AbsoluteMatrix);
           PosXY = Vector2.Transform(Vector2.Zero, Transform.AbsoluteMatrix);

           float scale = 2 * (Radio * 2) / (OperationModeTextures[(int)OperationMode].Width);
           
           Vector2 origin;
           origin.X = OperationModeTextures[(int)OperationMode].Width;
           origin.Y = OperationModeTextures[(int)OperationMode].Height;

           Batch.Begin();
           // Cuadraditos para seleccionar con el raton
           Batch.Draw(Texture, PosX, null, XX.Color, 0, Vector2.One * 0.5f, Radio * 2, SpriteEffects.None, 1);
           Batch.Draw(Texture, PosY, null, YY.Color, 0, Vector2.One * 0.5f, Radio * 2, SpriteEffects.None, 1);
           
           // Muestra de la operacion de transformacion seleccionada en el origen del gizmo
           Batch.Draw(OperationModeTextures[(int) OperationMode], PosXY, null, XY.Color, 0, origin * 0.5f, scale, SpriteEffects.None, 1);
           Batch.End();
       }



Y esta es la configuracion inicial de la escena:
Código (csharp) [Seleccionar]

 prueba4.Components.First<Bone2D>().IdParent = 3;
 prueba4.Components.First<Bone2D>().Position = new Vector2(100, 100);
 prueba3.Components.First<Bone2D>().IdParent = 2;
 prueba3.Components.First<Bone2D>().Position = new Vector2(100, 100);
 prueba3.Components.First<Bone2D>().RotationDegrees = 45;
 prueba2.Components.First<Bone2D>().RotationDegrees = 45;
 prueba2.Components.First<Bone2D>().Position = new Vector2(100, 100);


#48
Ahora que somos campeones del mundo de fútbol, el PIB va a subir 4 decimas, la crisis se va a acabar, el paro va a descender, los españoles vamos a ser unos triunfadores donde vayamos,  vamos a programar unos juegos del copón y vamos a hincharnos a vender juegos en todas las plataformas del mundo mundial.

!!! Iniesta for president ¡¡¡

Vaya mundial que se ha marcado la selección, y lo mejor para mi ha sido el comportamiento ejemplar de los nuestros, porque es difícil aguantar el acoso y derribo de los holandeses, que cambiaron el fútbol total por la guerra total.

Tenemos mucha suerte de tener a Pau, Nadal, Alonso, y a esta gente que nos representa con una imagen impagable, porque ese comportamiento sale del alma.

Campeones del mundo en Tenis, Futbol sala, Balonmano, Baloncesto, y ahora Futbol. ¿Quien lo diria hace 10 años?





#49
Proyectos / Astro Attack
27 de Junio de 2010, 11:59:18 PM
Buenas, hace un par de semanas me puse nostalgico con mi emulador del cpc, y buscando por la 'A' me apareció el Astro Attack.

Me pareció un gran juego para jugar en multiplayer local en la xbox, asi que me puse a hacerlo en Xna

Aqui os dejo la version de lo que llevo hecho, queda mucho por pulir, sobre todo a nivel grafico, y ahora mismo los niveles se forman de manera procedural y no esta bien compensada la dificultad, pero se puede jugar. :)

Los powerup activos son: Jump, MultiFire, Shield

Es recomendable usar un gamepad y el teclado esta mas bien para ir probando cosas, pero se puede jugar con teclado, las teclas son:

'1' -> Start
'Cursores' -> Mover
'Espacio' -> Dispara
'Enter' -> Seleccion menu
'X': Salto

Podéis descargar la versión ejecutable aquí http://game.estanuestraweb.com/Astro.zip


Y un video  aqui
#50
General Programadores / C# PropertyGrid
19 de Junio de 2010, 09:35:45 PM
Buenas, ando liado haciendo un editor para una interfaz grafica que estoy haciendo en XNA.

Estoy usando un PropertyGrid para acceder a las propiedades y modificarlas.

Pero me he encontrado con un problema, tengo una clase StyleCollection que contiene los estilos que puedo aplicar a los controles y me gustaria que se desplegara mostrnado los diversos estilos, como cuando despliegas las propiedades de una fuente, pero no consigo hacerlo.

Y luego viene el tema del Style, qur tb me gustaria que se deplegara con los colores.



Bueno, seguire indagando....

Código (csharp) [Seleccionar]

public class StyleCollection
{
       public Style Normal { get { return Styles[(int)StyleType.Normal]; } }
       public Style Over { get { return Styles[(int)StyleType.Over]; } }
       public Style Pressed { get { return Styles[(int)StyleType.Pressed]; } }
       public Style Disabled { get { return Styles[(int)StyleType.Disabled]; } }
       public Style Hidden { get { return Styles[(int)StyleType.Hidden]; } }

       public event Action StyleTransitionEnded;
       public event Action StyleTypeChanged;
}

public class Style
{
       public event Action Changed;

       public Color BorderColor { get { return _BorderColor; } set { _BorderColor = value; OnChanged(); } }
       public Color BackgroundColor { get { return _BackgroundColor; } set { _BackgroundColor = value; OnChanged(); } }
       public Color ImageColor { get { return _ImageColor; } set { _ImageColor = value; OnChanged(); } }
       public Color TextColor { get { return _TextColor; } set { _TextColor = value; OnChanged(); } }
       public Color BackgroundTextColor { get { return _BackgroundTextColor; } set { _BackgroundTextColor = value; OnChanged(); } }
       public float TransitionDuration { get { return _TransitionDuration; } set { _TransitionDuration = value; OnChanged(); } }      
}

public abstract class GuiControl
{
       public ControlCollection Controls { get; private set; }    
     
       public Skin Skin { get; set; }

       public StyleCollection Styles { get;  private set; }
       ....      
}

#51
Pues eso, sabeis de algun banco de sonidos para ese tipo de juegos?

He estado buscando y ando perdido.

Gracias.
#52
General / Cursos de Verano
11 de Mayo de 2010, 10:23:22 AM
Todos los veranos me tomo una semanita para hacer algún curso relacionado con los videojuegos,

He hecho uno de shaders y uno de XNA avanzado en la pompeu fabra, ( BCNPLAY'07 y '09) que son muy recomendables.
y en el 2008 estuve en el gamelab en Gijón para un taller de computación gráfica avanzada o algo así, pero que al final el ponente, un chaval que trabajaba en nvidia, no pudo asistir, y  se sustituyo por otro sobre engines en plan salvemos esto como sea,  que fue "decepcionante" por no usar palabras malsonantes.

El tema es que parece ser que los cursos de la pompeu fabra, parece ser que este año van a durar 4 semanas, y eso no puedo permitirmelo,

Así que ando buscando cursos para este verano de 1 o 2 semanas de duración, de algo relacionado con videojuegos, informática, robots asesinos,... :) 

Hasta ahora no he encontrado nada que se ajuste, y muchos cursos de verano todavia no estan ni definidos, lo cual para la gente que vamos de fuera es una putada un problema, porque tenemos que buscar alojamiento y transporte, y cuanto mas tardas, peor.

En fin, ¿alguien sabe de alguno?

#53
General Programadores / LinQ y expresiones lambda
07 de Abril de 2010, 06:47:07 PM
¿Por que c# no me permite esto?

 
Código (csharp) [Seleccionar]
List<State> _States = new List<State>();

public T Peek<T>() where T : State
{
      return _States.First(s => (typeof(s) == typeof(T)));
}


Error   1   The type or namespace name 's' could not be found (are you missing a using directive or an assembly reference?)   C:\Documents and Settings\blau\Escritorio\defense\Gameplay\States\StatesManager.cs   65   47   Gameplay

State es una clase base de la que heredan los diversos estados del juego.

Esto si me lo permite:  
Código (csharp) [Seleccionar]
return _States.OfType<T>().First();

#54
XNA / Nuevo proyecto en XNA
09 de Marzo de 2010, 09:04:44 AM
Buenas, llevo un par de semanas dándole al teclado en mis ratos libres para hacer un juego de defensa de torres.

La idea general es hacer un warcraft 3 orientado a defensa de torres, de momento lo que voy empezando a tener es el minimapa. :D

Este es un proyecto recurrente para mi, así que espero poder tener algo jugable algun día.

La idea es añadirle render3D, multijugador y completar el editor para que un usuario pueda hacer sus mapas y compartirlos.

De momento esto es un vídeo de lo que hay hecho:

http://www.youtube.com/malditis#p/f/u-all/0/mYLSZJViSDc
#55
XNA / Tiled
07 de Marzo de 2010, 03:43:42 AM
Me he encontrado con un editor de mapas de tiles que esta muy currado, y que nos puede ahorrar hacer el típico editor de mapas,
y ademas es de código abierto.

Sirve para cualquier plataforma y ya se han hecho Content Importers para XNA:

http://www.luminance.org/code/2009/06/17/tiled-map-loader-for-xna

http://nickgravelyn.com/2010/03/know-when-to-be-lazy/

Espero que le sea util a alguien,

#56
Proyectos / Gals Panic Clon
07 de Enero de 2010, 01:18:14 AM
Buenas, esta Nochevieja enchufé la recreativa para echar unas partiditas y apareció el Gals Panic.

Me entró la nostalgia y en unas horillas que he tenido estas fiestas, he hecho un semiclon.

Aqui teneis un video  http://www.youtube.com/watch?v=UaQo4tRukro

Quedan que perfilar muchas cosillas pero ya es "jugable".   :..

Se aceptan criticas contructivas.  ;)
#57
General / Dreambuild play 2010
28 de Diciembre de 2009, 03:39:00 PM
Ya ha salido la convocatoria para el nuevo dream build play.

Los premios han aumentado y hay dos categorias, la normal de microsoft y una patrocinada por old spice, en total si alguien queda primero en las dos categorias puede ganar 100000$.  :)_

Con old spice puedes ganar 60000$, y con microsoft 40000$ y ... cha ...chan... un contrato para publicar en xbox live arcade.

Lo cual no esta nada mal, la unica pega que le veo, es que el limite de entrega es hasta el 3 de Marzo de 2010.

Los de nivel21 demostraron que es factible... a ver si os animais.
#58

CitarEpic podría lanzar una edición especial del motor gráfico Unreal Engine 3 para el gran público, según rumores surgidos a través de un mensaje en un foro de la compañía que inmediatamente ha sido retirado.

Enlace a la noticia en Meristation http://www.meristation.com/v3/des_noticia.php?id=cw4ae44d66d87a2&pic=GEN

Puede que sea solo un rumor, pero seria una gran noticia...  :)_
#59
Programación gráfica / Stencil Buffer
30 de Agosto de 2009, 01:47:34 PM
Buenas, es la primera vez peleandome con el stencil buffer. Iba ganando hasta hace un rato...  ^_^'

Estoy haciendo mascaras en 2D.

Lo basico funciona. es decir enmascarar un sprite con otro.

Pero ahora lo que quiero hacer es rellenar el stencial buffer con valores entre 0..255 en funcion de la altura.

Es decir, el buffer es de 8 bits y tamaño  800x600, que quisiera rellenarlo con un gradiente vertical.

¿Es posible?

Porque a simple vista no se me ocurre como, ...
miento, acaba de ocurrirseme hacer 255 pasadas con 255 valores de referencia distintos.
pero me parece algo bestia...

:?

Supongo que tendre que hacer un shader...





#60
Programación gráfica / Bones
24 de Mayo de 2009, 03:04:03 AM
Buenas,

ando liado con un sistema de animacion esqueletal.

Hasta ahora he conseguido:

- Leer toda la informacion del modelo, con sus bones, helpers, attachements, ... con sus correspondientes interpoladores.

- Leer las diferentes secuencias.

- Mostrar el modelo en estatico.

Ahora estoy renderizando las secuencias, y las rotaciones y las traslaciones creo que las hago bien. Pero el escalado de los distintos geosets no lo hace bien.

El codigo que uso es:

Código (csharp) [Seleccionar]

TranslationVector = Translation.GetValue(Time);

RotationVector = Rotation.GetValue(Time);

ScalingVector = Scaling.GetValue(Time);

Matrix mPivotPoint = Matrix.CreateTranslation(PivotPoint);

Matrix mScaling = Matrix.CreateScale(ScalingVector);

Matrix mRotation = Matrix.CreateFromQuaternion(RotationVector.ToQuaternion());

Matrix mTranslation = Matrix.CreateTranslation(TranslationVector);

Matrix mPivotPointInverse = Matrix.Invert(mPivotPoint);



Transform = mPivotPointInverse * mScaling * mRotation * mPivotPoint * mTranslation;

if (Parent != null && Parent.NodeId != -1) {

    Transform = Matrix.Multiply(Parent.Transform, Transform);

}

foreach (BaseNode child in Children) {

    child.BuildTransformMatrix(Time);

}


Es correcto esto?

Para mas datos, si visualizo el modelo en estatico, es decir, sin transformar los vertices. Sale todo correcto.

Incluso si visualizo los bones, estos se corresponden mas o menos con el modelo, pero cuando transformo los nodos, las escalas se van a tomar por ...

Tb agradeceria noticias de alguna documentacion sobre el tema.

Un saludo.

PD: Creo q voy a acostarme, quizas mañana con la cabeza despejada....







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.