Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sdl, Directx...

Iniciado por Gezequiel, 18 de Diciembre de 2005, 02:26:58 AM

« anterior - próximo »

Gezequiel

 Bueno, despues de un tiempo de no hacer absolutamente nada me vinieron unas ganas de empezar a probar C# y hacer algo sencillo... Pero en cuanto me dispuse a buscar un buen motor los resultados fueron totalmente desastrosos (aclaro que quiero empezar por algo 2D asi que el engine de Haddd y cia no funciona)...

Asi que me resigne y decidi utilizar alguna libreria tipo DirectX o SDL o lo que fuere... El problema es que no se cual elegir!

Tenia pensado elegir SDL (en su version .NET) pero escuche por estos foros que solo es recomendable si se desea que el proyecto sea multiplataforma, que en definitiva no seria, en  mi caso un requerimiento necesario...
Y tambien esta DirectX, pero segun tengo entendido este es mucho mas coplicado y sufre radicales cambios de una version a la otra...

Asi que si alguien conoce de algun  engine o recomienda alguna libreria, estaria dandole mucha luz a mi obscuro camino...



Gezequiel

 No quiero usar Haddd porque tendria que pedir como requerimientos minimos una placa que soporte shaders 2.0 siendo que no los voy a utilizar porque el juego es 2D! Sino con gusto lo huebiera elegido.

Ademas de todo eso ni mi placa soporta shaders 2.0 XD


P.D: Sigo diciendo que se necita un emoticon con cara de XD. Espero no tener que crear un post dando el ultimatum para que lo agregen  (twist)  

seryu

 pues yo prefiero un xD a emoticones gays  :wub:

Lex


Haddd

 Usa Managed DirectX sin dudarlo. Para 2D está muy bien, tienes el interface D3DXSprite que te permite dibujar sin problemas, además que hay bastantes ejemplos en la web de juegos 2D hechos con C# y MDX.

zupervaca

 si al final te decides por usar managed directx (creo que es la mejor opcion si no quieres multiplataforma) te dejo un codigo basura que hice hace tiempo para hacer pruebas con otro usuario de stratos, el codigo es chapuza total, pero te viene lo basico para utilizar los sprites de directx, si estas mas interesado en el tema puedes descargar el motor dib de c-sharp en mi web
using System;
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
using System.Threading;
using System.IO;
using System.Drawing;
using dib.DirectX;

namespace pruebasDirectX
{
   public partial class Form1 : Form
   {
       public Device Device;
       private bool IsDeviceLost;
       private Texture Picture;
       private Sprite Bob;
       private dibFPS FPS = new dibFPS();
       private Conejo[] Conejos = new Conejo[1000];

       public Form1()
       {
           InitializeComponent();
           this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.Opaque, true);
           PresentParameters pp = new PresentParameters();
           pp.Windowed = false;
           pp.BackBufferCount = 1;
           pp.BackBufferFormat = Format.A8R8G8B8;
           pp.BackBufferWidth = 800;
           pp.BackBufferHeight = 600;
           pp.DeviceWindow = this;
           pp.PresentationInterval = PresentInterval.Immediate;
           pp.SwapEffect = SwapEffect.Discard;
           if (pp.Windowed)
           {
               this.SetBounds(0, 0, pp.BackBufferWidth, pp.BackBufferHeight);
               pp.FullScreenRefreshRateInHz = 0;
           }
           else
           {
               pp.FullScreenRefreshRateInHz = 60;
               this.FormBorderStyle = FormBorderStyle.None;
           }
           this.Device = new Device(0, DeviceType.Hardware, this.Handle, CreateFlags.MixedVertexProcessing, new PresentParameters(pp));
           this.Device.DeviceLost += new EventHandler(OnDeviceLost);
           this.Device.DeviceReset += new EventHandler(OnDeviceReset);
           OnDeviceReset(null, null);

           Random rand = new Random();
           for (int i = 0; i < Conejos.GetLength(0); i++)
           {
               Conejos[i] = new Conejo();
               Conejos[i].Position = new Point(rand.Next(500), rand.Next(500));
               Conejos[i].Dir = new Point(rand.Next(-4, 4), rand.Next(-4, 4));
               if (Conejos[i].Dir.X == 0 && Conejos[i].Dir.Y == 0)
               {
                   Conejos[i].Dir.X = rand.Next(-4, 4);
                   Conejos[i].Dir.Y = 1;
               }
           }
       }

       public class Conejo
       {
           public Point Position;
           public Point Dir;
           public Point Rotation = new Point(0, 0);
           public void Draw(Sprite bob, Texture text)
           {
               if ((uint)Position.X > 800-100) Dir.X *= -1;
               if ((uint)Position.Y > 600-100) Dir.Y *= -1;
               Position.X += Dir.X;
               Position.Y += Dir.Y;
               bob.Draw2D(text, Rotation, 0, Position, Color.White);
           }
       }

       public void RenderScene()
       {
           this.Device.Clear(ClearFlags.Target, Color.Black, 0, 0);
           this.Device.BeginScene();
           this.Bob.Begin(SpriteFlags.AlphaBlend);
           for (int i = 0; i < Conejos.GetLength(0); i++)
           {
               Conejos[i].Draw(this.Bob, this.Picture);
           }
           this.Bob.End();
           this.Device.EndScene();
           this.Present();
           this.Text = this.FPS.CalculateFPS().ToString() + " - Max: " + this.FPS.MaxFPS;
       }

       public void Present()
       {
           if (!IsDeviceLost)
           {
               try
               {
                   this.Device.Present();
               }
               catch (DeviceLostException)
               {
               }
           }
           else
           {
               try
               {
                   Thread.Sleep(500);
                   this.Device.TestCooperativeLevel();
               }
               catch (DeviceLostException)
               {
               }
               catch (DeviceNotResetException)
               {
                   try
                   {
                       this.Device.Reset(this.Device.PresentationParameters);
                   }
                   catch (DeviceLostException)
                   {
                   }
               }
           }
       }

       void OnDeviceLost(object sender, EventArgs e)
       {
           IsDeviceLost = true;
       }

       void OnDeviceReset( object sender, EventArgs e )
       {
           IsDeviceLost = false;
           this.Bob = new Sprite(this.Device);
           this.Picture = TextureLoader.FromFile(this.Device, "../../icon.bmp", 0, 0, 0, Usage.None, Format.A8R8G8B8, Pool.Default, Filter.None, Filter.None, Color.Black.ToArgb());
       }

       private void Form1_KeyDown(object sender, KeyEventArgs e)
       {
           if (e.KeyCode == Keys.Escape)
           {
               Close();
           }
           if (e.Alt && e.KeyCode == Keys.Enter)
           {
               if (this.Device.PresentationParameters.Windowed)
               {
                   this.Device.PresentationParameters.Windowed = false;
                   this.Device.PresentationParameters.FullScreenRefreshRateInHz = 60;
                   this.FormBorderStyle = FormBorderStyle.None;
                   this.Device.Reset(this.Device.PresentationParameters);
               }
               else
               {
                   this.Device.PresentationParameters.Windowed = true;
                   this.Device.PresentationParameters.FullScreenRefreshRateInHz = 0;
                   this.FormBorderStyle = FormBorderStyle.Sizable;
                   this.Device.Reset(this.Device.PresentationParameters);
                   this.SetBounds(0, 0, this.Device.PresentationParameters.BackBufferWidth, this.Device.PresentationParameters.BackBufferHeight);
               }
           }
       }

       private void Form1_FormClosing(object sender, FormClosingEventArgs e)
       {
           if (this.Device != null)
           {
               this.Device.Dispose();
           }
       }
   }
}

Gezequiel

 Gracias a todos...
Parece que voy a utilizar Managed Directx y quisas me ayude con el dibGameMaker de zupervaca y quiusas tambien su "Dll para manejar y optimizar DirectX", pero primero voy a echarle un vistazo a ambos...

Gezequiel

 Otra asunto que tambien me parece importante...
Que version de DirectX me recomiendan?? La ultima, de diciemre?? Alguna otra?? :blink:
Bien, eso es lo primero, despues algun sitio con ejemplo tutoriales o lo que sea?? (preferentemente en español, aunque en ingles tambien son bienvenidos)
Y tenia una pregunta mas, pero se me ah olvidado XD :blink:  (grrr)  

Haddd

 Nosotros estamos con la de diciembre y no hay problemas. De todas formas ahora MDX cambia, y coexiste la versión 1.1 y la 2.0 está de pruebas. Podrás elegir la que quieras, pero la 2.0 no la he probado.

Sobre ejemplos, ya postee algunos, pero mírate: www.thezbuffer.com

Suerte

Gezequiel

 El SDK de diciembre pesa 300MB!!!!
Pero si la version de octubre pesaba solo 200MB espero que esos 100MB este justificados!

zupervaca

Cita de: "Gezequiel"El SDK de diciembre pesa 300MB!!!!
Pero si la version de octubre pesaba solo 200MB espero que esos 100MB este justificados!
yo creo que esta mas que justificado ya son fotos wuarras :lol:

BeRSeRKeR

Cita de: "Gezequiel"El SDK de diciembre pesa 300MB!!!!
Pero si la version de octubre pesaba solo 200MB espero que esos 100MB este justificados!
La carpeta con los ejemplos de Direct3D10 ocupa cerca de 50MB y si luego han añadido nuevos recursos (texturas, modelos, etc)...

Saludos.
¡Si te buscan en nombre de la ley, huye en nombre de la libertad!!

seryu

Cita de: "BeRSeRKeR"han añadido nuevos recursos (texturas, modelos, etc)...
entonces zupervaca tiene razon: han metido fotos warras.

zupervaca

 Me lo acabo de bajar, he estado mirando las cosas nuevas que trae, respecto a .net parece que hay mejores como siempre, pero son beta:
CitarManaged DirectX for .NET Framework 2.0 (Beta)
Included with the December 2005 DirectX SDK is updated support for the .NET Framework 2.0 in Managed DirectX. This assembly addresses the issues users were having with using Managed DirectX in Visual Studio 2005. It also includes new features designed to take full advantage of the features included in the .NET Framework 2.0 such as generics.

To use the new assembly, load up Visual Studio 2005, and after creating a new project add a reference to "Microsoft.DirectX.dll" You may see multiple versions of this assembly depending on any past DirectX SDK's you've installed, so add the reference to the one with the version 2.0.0.0. The namespaces you'll find in this assembly are:

Microsoft.DirectX - Which includes all of the common math structures, as well as the new GraphicsBuffer class which replaces the GraphicsStream class from the original Managed DirectX
Microsoft.DirectX.Diagnostics - DxDiag functionality
Microsoft.DirectX.Direct3D - Direct3D and D3DX functionality
Microsoft.DirectX.DirectSound - DirectSound functionality
Microsoft.DirectX.DirectInput - Direct Input functionality
Microsoft.DirectX.Xact - XACT audio functionality
Microsoft.DirectX.XInput - XInput functionality
Besides support for the .NET Framework 2.0, this updated assembly has a number of new additions which we would love feedback on, including better performance, and a cleaner API.

Note    Managed DirectX for .NET Framework 2.0 is an early beta; complete samples and documentation will be provided in a later release of the DirectX SDK.
`
Para los que seguimos con unmanaged solo hay tres funciones nuevas relacionadas con los shaders, lo demas es para xbox 360 (por lo menos hasta donde he leido); las verdades novedades es que viene d3d10 aunque solo podrás probarlo si tienes el vista.

Conclusión: si vas a usar c-sharp es recomendable que los descargues.

Editado: Se me olvidaba, he compilado los proyectos que tengo de c++ y c-sharp sin tener que cambiar nada de código, un pequeño paso para la humanidad y un gran paso para Microsoft :lol:.






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.