Bienvenidos, en este primer tutorial explicaré como crear una ventana usando el lenguaje C++ en conjunto con las librerias SDL. Si quieres adentrarte en el mundo de la programación con librerias para crear objetos en 2D, te invito a que leas este tutorial.
Se parte del hecho de que se tiene un conocimiento mínimo de el lenguaje C++, se dispone de un editor, un compilador y las librerías necesarias instaladas.
Sin mas comencemos....
Este es el código de nuestra primera aplicación SDL:
#include <iostream> #include <SDL/SDL.h> SDL_Surface *screen = NULL; int main(int argc, char* args[]) { SDL_Init(SDL_INIT_EVERYTHING); screen = SDL_SetVideoMode(480, 272, 32, SDL_HWSURFACE | SDL_DOUBLEBUF); SDL_WM_SetCaption("Creacion de una ventana", NULL); SDL_Delay(5000); SDL_Flip(screen); return 0; }
#include <iostream> #include <SDL/SDL.h>
Si has estudiado algo de C/C++ enseguida sabras de que se trata.
Los #include
indican qué librerías queremos usar así como la ubicación de estas, los valores debes ajustarlos de manera que apunten a la ubicación correcta, el ejemplo que he puesto sería para llamar a las librerias bajo un sistema GNU/Linux.
//Superficies SDL_Surface *screen = NULL;
Para SDL una superficie es un es un objeto que se puede pintar en pantalla y sobre el cual se pueden pintar otros objetos, es por ello que para poder hacer uso nuestra pantalla necesitamos declarar una superficie de manera que SDL sepa que se puede pintar ahí.
Como se trata de un puntero, lo apuntamos a NULL de manera que prevengamos errores de memoria inesperados.
//Funcion main main (int argc, char *args[]) {
Ahora pasamos a nuestra función main, quizá notes algo raro en ella, argc y args son formas de interactuar con la línea de comandos, mediante ellas se pasan argumentos, ahora mismo no haremos uso de ellas.
argc define el número de argumentos y argv los argumentos que se pueden pasar.
//Iniciar SDL SDL_Init(SDL_INIT_EVERYTHING);
Con esta función podemos iniciar SDL, la sintaxis es sencilla:SDL_Init(Uint32 flags);
Entre las flags disponibles tenemos:
Dependiendo de lo que quieras hacer necesitarás usar unas u otras, escoge con cuidado ;-)
//Nuestra pantalla screen = SDL_SetVideoMode(480, 272, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
¿Recuerdas que antes habiamos definido una superficie llamada "screen" y que la habíamos apuntado a "NULL"? Bien, es hora de darle su verdadero valor, la sintaxis es muy sencilla: SDL_SetVideoMode(int ancho, int alto, int bpp, Uint32 Flags)
Entre las flags disponibles tenemos:
Igual que con SDL_Init, dependiendo de lo que busques deberás usar unas flags u otras.
El resto del programa es fácil de explicar, y no presenta mayores complicaciones, por lo que lo comentaré en un solo bloque.
SDL_WM_SetCaption("Creacion de una ventana", NULL);
Esto lo que hace es ponerle nombre a nuestra ventana, el primer parámetro es el nombre de la ventana y el segundo el nombre de la ventana iconizada.
SDL_Delay(5000);
Esto lo que hace es decirle a SDL que "duerma" una determinada cantidad de tiempo, si no lo pusiéramos, a falta de un bucle infinito, no lograríamos ver nada en nuestra pantalla.
SDL_Flip(screen);
Simplemente "vuelca" los buffers, de manera que podamos ver lo que hemos estado haciendo en pantalla.
Ahora simplemente compila el programa y lanzalo, deberás poder ver una ventana, con el nombre que le has puesto, sin ningún contenido, pero al fin y al cabo es el primer paso.
Comentarios
No he aprendido C++ por
No he aprendido C++ por falta de tutos!! Gracias, espero más tutos!!
Todo se andara
La verdad es que es un campo que queremos ir completando poco a poco, pero actualmente xXZeroXx es el único editor con conocimientos y cualidades para seguir completando esos tutoriales. Desafortunadamente también es de los pocos que pueden probar aplicaciones para Linux, y tutoriales de Linux, por tanto se irán creando a medida que el pueda.
Son bien acogidos posibles tutriales de cualquier lenguaje de programación que quieran aportar los usuarios, saludos.
Pero mas bien se debería
Pero mas bien se debería llamar "Creación de ventana", en singular, porque SDL solo soporta una ventana...
Pero por poder
Pero por poder puedes hacer mas de una ventana aunque sea en varios proyectos.
No se pone el acento por la url.
Saludos
Ups
no se me ocurrió lo de la url.
saludos
y de paso
ponen el acento.
Buen tuto saludos.
No se me pasó
Simplemente no lo puse, o más bien, no debería ponerlo porque se carga la URL, en cuanto al título, yo no le veo mayor problema, se entiende que el tuto será para aprender a crear ventanas, no para que corran varias ventanas a la vez...
Saludos.
Oye, que yoya estoy empoyanmelo, pero..
pero tu a lo tuyo, cuando quieras haces otro...xD siempre y cuando sean de C++ y no de C... ... que a mi el C... ...digamos que prefiero C++
I like:
¿Algún motivo en concreto
¿Algún motivo en concreto para que no te guste C? Todo el código que ha puesto en este tutorial es válido tanto en C como en C++, salvo el include de "iostream", que no ha usado para nada y que podría quitar de ahí sin hacer daño a nadie.
Por cierto, SDL está en C.
Algun motivo
pos muy simple, por que C++ es mejor que C, bueno, esa era la finalidad de la creacion de C++, mejorar el C, y el resultado fué C++
Esa es la razon, pos por que C++ es mejor, no cres?
I like:
Jamás
Ningún lenguaje es mejor que otro, cada uno tiene sus dotes y sus errores pero ninguno es mas malo que otro...
C++ es "C" con "++" es decir, "mejorado" hasta cierto punto, orientado a objetos y demás, pero C++ no nos brinda un nivel bajo de programación cosa que C si hace, ale, enseñamen un kernel que haya sido programado enteramente en C++, simple, no existe pues C++ no da el ancho para llamadas a funciones de bajo nivel.
Linux esta hecho en C, GNOME esta hecho en C, gran parte de Mac esta hecho en C orientado a objetos ( que no es C++)
Jamás desprecies un lenguaje, ninguno es mejor que otro, cada uno es bueno en su area de aplicación.
Saludos.
Segun el partido que le saques
Si nos guiamos por tus comentarios de que C++ es mejor que C porque se creo para mejorar C, yo puedo decirte que D es mejor que C++, porque el lenguaje de programación en D se creo para simplificar las tareas a los programadores, con la peculiaridad de que si sabes C puedes programar con C/D en un compilador de D (ademas de ser influido por lenguajes como java, C# y Eiffel.
La programación en D a sido un gran avance para los que han sabido aprovechar dicho lenguaje (que porcierto a sido creado por el programador principal de un compilador nativo de C++, Zortech C++ (más tarde Symantec C++, ahora Digital Mars C++). Su ultima obra, esta que te digo, programación en D y su compilador, con sus propias librerías estándar.
Ahora llego hasta donde quería llegar .... que lenguaje es mejor para un programador que a diseñado y aprendido desde sus comienzos en Python, Pascal y JavaScript. ¿C++ o python? a mi juicio este programador le sacara mas partido a Python que a C++,pero si eres capaz de presentarme a algún programador que nunca allá visto C++ que sea capaz de sacarle mas partido a C++ que a Python que es el lenguaje que domina ....
Si tu teoria de lo de Python, es cierta
entonces un programador le poderia sacar un enorme partido a lenguage GO, poderian hacerse cosas realmente potentes, pero solo se aprobecharian a una mitad, no cres?
Lenguage GO es formado a partir de Python y C, si dices que a Python se le saca probecho y a C/C++ no, entonces a GO, sus aplicaciones solo aprobecharian la mitad del potencial del lenguage en que están programadas, no?
Al igual que... ...(no se como se llama) ha dicho, no hay un lenguagemejor queotro, pero como el ha dicho, C++ es ÇC, pero mejorado, que es lo que he dicho yo, y yo creo que si un progamador domina C++, puede llegar a dominar muchos lenguages, ya que muchos lenguages, tienen parecencias a C++ y en gran parte a C. Yo no se Python, peor seguro que tambien comparte caracteristicas, variables y funciones con C++, asin que creo que C++ es un lenguage muy util con el que se pueden hacer miles de cosas y por tiempo que pase, creo que C++ siempre será un lenguage recomendado para aprender.
I like:
Pues por ejemplo a mi me
Pues por ejemplo a mi me gusta más C que C++, y te puedo dar motivos de verdad, no un simple "es que se creó C++ para mejorar C". Por ejemplo, yo no utilizaría para nada las clases, o lo de sobrecargar operadores que C++ permite. Y dado que no voy a usar sus mejoras, pues prefiero quedarme con C, que es más simple, y el compilador podrá hacer mejor su trabajo si ignora todo lo que no voy a usar.
Los lenguajes interpretados como python no se pueden comparar a los compilados como C/C++. Cada uno tiene su función. La de los compilados es la de centrarse en velocidad, la de los interpretados la de centrarse en que sea compatible con todas las plataformas posibles y abstraer el hardware todo lo posible. Java, por ejemplo, está entre medias. Se compila, pero no para un procesador en específico, sino para un procesador imaginario que luego se interpreta en la máquina virtual. Es más rapido que interpretar todo el texto, pero sigue siendo más lento que algo compilado directamente.
Por cierto, lo de que C++ es de más alto nivel es relativo, puedes hacer todo lo que hace C y además usar las mejoras que incluye C++, pero eso no quiere decir que las cosas de bajo nivel desaparezcan. De hecho, puedes incluir código en ensamblador en C++, que es lo de más bajo nivel que se puede hacer en C.
O_o
No sabes qué bien me viene esto, para saber un poco qué forma darles a las funciones de MultiTasKing :-P
Aunque la versión actual de MultiTasKing ya tiene las funciones aquí mencionadas (o funciones similares), me interesan especialmente las funciones de crear botones, cuadros de texto... etc
No sé si esto último es posible en SDL
Muchas gracias por este tutorial :-P
Saludos!
https://github.com/CarlosGS/
Objetos
Pues SDL no maneja a por ejemplo, un boton como un "objeto", sino que es una imagen, igual a como se maneja en Lua, pones una imagen, defines el rango de interacción con el mouse y asocias una acción cuando el mouse de click sobre el rango definido.
Si buscas algo para creación de ventanas "reales" recomendaría wxWidgets, algo mas sencillo wxPython, pero creo que no existiria la posibilidad de correrlo en PSP.
Me alegra que te sea de utilidad.
Saludos.
ok
es lo que imaginaba ;-)
Pues lo de este tutorial es similar a lo que se puede hacer en multitasking :-P
buscaré algun tuto de creacion de botones de sistema y eso
gracias de nuevo
salu2
https://github.com/CarlosGS/
Me has dado
la alegria mas grande de todo lo que llevamos de 2010!!
Llevo meses buscando un tutorial que me enseñe a hacer cosas con ventanas en C++, pero nada, y aora vas tu, y pones uno en SB, aleluya!!
Bueno, gracias, pero una cosa:
¿Esto funciona en Linux, si no me has matado de un golpe...?
Gracias por el tutorial, de verdad, gracias...
I like:
Esto funciona
En cualquier plataforma, son las ventajas de usar librerias libres y estandar :D
Saludos.
Me has dado una alegria
Es que saves en el pos de "Necesito sustitutos..." Era por que me queria pasar a linux. Ya he hecho la migracion, tengoinstalado MAndriva y Mac OS 10.6 snow Leopard. Pero uso mas el Mandriva que otro...xD
Bueno, la cuestion es que queria continuar mis proyectosC++ en Linux, y si esto no funciona en linux, pues el tutorial no me ayudava, pero si dices que si, perfecto!!
Gracias!!
I like:
Gracias.
Muy buen tuto.Muy bien explicado.
Muchas gracias xXZeroXx.
Un saludo.
Me gusta
Me gusta ver que los tutos siguen creciendo, yo actualmente estoy aprendiendo HTML, después de este lenguaje a ver si entro en otro que ya este dirigido a objetos