Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Sobre POO

Iniciado por anthony, 03 de Diciembre de 2007, 04:23:01 PM

« anterior - próximo »

anthony

Quisiera saber cual seria la dieferencia (si la hay) entre la POO y la POO en videojuegos

y porque es mejor porgramar videojuegos en lenguajes con C++ o C# en lugar de VB (por ejemplo)?

Y si tuviesen ebook's gratuitos de programacion de videojuegos, podrian pasarmelos?

Tei

Cita de: "anthony"Quisiera saber cual seria la dieferencia (si la hay) entre la POO y la POO en videojuegos

y porque es mejor porgramar videojuegos en lenguajes con C++ o C# en lugar de VB (por ejemplo)?

Y si tuviesen ebook's gratuitos de programacion de videojuegos, podrian pasarmelos?

Pregunta nº1. POO juegos vs POO negocios.

No hay diferencia, que yo sepa. Pero en software de negocio, casi siempre hay que trabajar con bases de datos, que no son OO. Y eso puede que desvirtue un poco la POO. Solamente quizas.

Pregunta nº2. C++ vs C# etc.

A nivel de aficionado, sacas mas ventajas de conocer un lenguaje, que de lo optimo que este sea para la tarea. Pero alrededor, por encima, y por abajo, C++ es mejor.

Pregunta nº3. Libros.

Yo los libros de informatica los prefiero tener de papel. Es la gracia de alejarte de la pantalla para que no sea siempre la misma actividad.
Si alguien tiene, no deberian pasartelos si la licencia no lo autoriza. No tu pedirlos. Pedir algo ilegal es algo que no se debe hacer en publico (por PM se puede hacer). Aunque solo sea porque es poco elegante, entre otras razones.

anthony

Pero porque C++ es mejor, estaba leendo en otras webs y por ejemplo "negrean" al visual basic para programar juegos, segun el argumento es que un juego en vb no es bueno mientras q un juego en c++ es mucho mejor pero no entiendo exactamente las razones

sobre los libros, me referia a libros gratuitos, me imagino q habra libros opensource o algo asi

y sobre POO, una ultima consulta, q es mejor para juegos un lenguaje orientado a POO o un leguaje estructurado, y porque?

tamat

Visual Basic arrastra fama de ser un lenguaje lento, en videojuegos se necesitan lenguajes que sean lo mas rapido posibles.

Por otra parte Visual Basic está muy orientado a interfaces gráficas al estilo windows, los juegos por lo general no se hacen así, se hacen programando con librerias graficas 2D o 3D.

En cualquier caso cualquier lenguaje es valido pero cuanto mas potente sea mejor.
Por un stratos menos tenso

Tei

Cita de: "anthony"Pero porque C++ es mejor, estaba leendo en otras webs y por ejemplo "negrean" al visual basic para programar juegos, segun el argumento es que un juego en vb no es bueno mientras q un juego en c++ es mucho mejor pero no entiendo exactamente las razones?

Visual Basic es extremadamente lento. La mayor parte del tiempo no se nota porque no esta en ejecucion, sino que lo que esta ejecutandose es el codigo de algun elemento de libreria (programado en C++) o los widgets de windows (programados en C++).

Si haces juegos que tengan la gracia de usar poco codigo VB, que la mayor parte del tiempo de ejecucion no se la tome VB. No se notara. Pero esto no es lo corriente. Al alejarte del GUI tipico, te pasara que tendras que usar mucho codigo VB para dibujar la GUI Mucho bucle y tal. Asi que ahi si se notara la lentitud.

De todos modos, sea como sea, la gente puede hacer cosas muy majas a pesar de estos problemas. VB no es optimo, pero no significa todo es imposible. Y repito la sabiduria forera en el asunto: el mejor lenguaje, es aquel que sabes manejar.

[EX3]

Lo peor del Visual Basic (refiriendome a versiones anteriores a la plataforma .NET) y viniendo de alguien que despues de 7 años programando en este lenguaje y cerca de 5 desarrollando una herramienta para tal proposito, es que su sintaxis es muy limitada y en grandes desarrollos llega hacerse muy incomoda. Otro de su puntos oscuros es que no existen muchas herramientas dedicadas para tal fin en este lenguaje y las que existen estan muy limitadas. Pero el peor sin duda es su mal rendimiento, aunque para juegos 2D con ciertos efectos visuales (olvidate de shaders) sirve y de sobra, ahi tienes juegos como el Protöthea desarrollado en Visual Basic 6.0 y DirectX 8.0, aunque no te metas a hacer cosas muy a bajo nivel por que no aguanta (trabajar a nivel de pixel por ejemplo o calculos de fisica).

C++ tiene las ventajas de poder desarrollar codigo portable a varios sistemas, de tener acceso al hardware, de compilar a codigo binario y no a ser un codigo interpretado como en el caso de Visual Basic 6.0 y anteriores, de poder hacer practicamente de todo y tan optimizado como seas capaz de ello. A grandes rasgos es el lenguaje de programacion mas generico y optimo que existe. Sumale a eso su sintaxis, orientada a la comoda filosofia de objetos y con flexibildiad a la hora de escribir el codigo, cosa que el basic no permite por ejemplo.

Lenguajes como C# o VB.NET son plataformas a medio camino de lenguajes como Visual Basic, Java y C++, recogiendo todo lo bueno de ellos: la potencia cercana a un programa de C++, la comodidad y productividad de tener un framework generico y completo por debajo, y la comoda sintaxis frente a la de C++, que resulta mas amigable y algo menos compleja. Ahora mismo, C# es una buena opcion para desarrollo de juegos en conjunto con XNA por ejemplo, aunque no le llegue a la misma altura a C++.

En verdad todo depende de lo que busques hacer, por que si el juego va a ser sencillo y te manejas de fabula con Visual Basic o lenguajes similares como Blitz3D o DarkBasic, pues quizas te valga la pena tirar con ello, o bien intentan subir de nivel y sacrificar algo de facilidad y sencillez en la programacion y probar con lenguajes mas serios como C# o C++ y abrirte a un mundo mas amplio de posibilidades y herramientas.

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

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

davidgf

Pues yo hice un juego en 3D y aguantó..... Vale hice trampas.. la fisica i lo sucio lo hacía un DLL en C++, pero la gestion de memoria es excelente en VB, lástima que sea lento y tan orientado a interfaz gráfica.

El VB es perfecto para hacer herramientas para hacer juegos por ejemplo, porque es rapido de programar y te olvidas de la mitad de cosas... pero donde esté el C....
Tàrraco: una aventura por la Tarragona romana (http://tarraco.davidgf.net)

[EX3]

Cita de: "davidgf"Pues yo hice un juego en 3D y aguantó.....
Respecto a lo grafico, intenta hacer algo similar al Doom3 o Halo y hablamos de si aguanta en una maquina de hace 5 años con una tarjeta de 32mb ;) La interfaz de DirectX8 para Visual Basic esta capadisima respecto a su original en C++, solo decirte que los shaders por ejemplo no funcionan igual en VB que en C++, los ejemplos del SDK son una prueba, y que muchas funciones no estan portadas a este lenguaje. Si te ayudas de librerias implementadas en C++ puedes lograr mejores resultados, pero con codigo 100% en Visual Basic baja mucho el resultado. Pero vamos, desarrollos 3D con algo mas de calidad que el Half-Life 1 si seria posible y con un rendimiento optimo, algo asi he visto con el TrueVision3D, lo cual no es poco.

Cita de: "davidgf"la gestion de memoria es excelente en VB, lástima que sea lento y tan orientado a interfaz gráfica.
Al no disponer de mecanismos como los punteros y similares es uno de los lenguajes que peor la gestiona, por ejemplo, mover bloques de bytes es lentisimo y eso lo sufri en una de las ultimas implementaciones que hice en la dx_lib32 y que finalmente di por imposible, leer y escribir a nivel de pixel en texturas, tremendamente lento respecto a implementaciones similares que he visto en C++. Lo unico bueno de lenguajes como Visual Basic es que te cubren las espaldas contra desbordamientos de memoria o errores similares, cosa que en C++ debes controlar tu al milimetro.

Cita de: "davidgf"El VB es perfecto para hacer herramientas para hacer juegos por ejemplo, porque es rapido de programar y te olvidas de la mitad de cosas... pero donde esté el C....
Totalmente deacuerdo, ahi esta la dx_lib32, pero realmente le veo el punto a Visual Basic no para hacer herramientas en si, que tambien, si no mas bien para hacer pruebas o prototipos de forma rapida, algo asi como otros hacen con lenguajes script como Python. Ahora mismo es de los pocos usos que le doy a este lenguaje.

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

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

Vicente

También se puede usar DirectX 9 y 10 con C# o VB.NET (o cualquier lenguaje .NET) usando SlimDX. Es quizás un pelín pronto aún pero la gente que lo lleva es muy buena.

Un saludo!

Vicente

[EX3]

Acabo de echarle un vistazo y no tiene mala pinta la iniciativa del proyecto SlimDX, una continuacion mejorada del MDX y con soporte DX10. A ver que tal evoluciona el asunto :)

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

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

anthony

Disculpen, pero todavia no tengo muy clara esta pregunta

Citary sobre POO, una ultima consulta, q es mejor para juegos un lenguaje orientado a POO o un leguaje estructurado, y porque?

Y gracias por sus respuestas, me han servido de mucho

Tei

Cita de: "anthony"Disculpen, pero todavia no tengo muy clara esta pregunta

Citary sobre POO, una ultima consulta, q es mejor para juegos un lenguaje orientado a POO o un leguaje estructurado, y porque?

Y gracias por sus respuestas, me han servido de mucho

Lo que se suele decir de estas cosas:

Seguramente habras oido hablar de los ordenes ejecucion.. estilo O(1), O(n) y tal.  Esto viene por el algoritmo, y no se puede afectar mucho por mejor o peor codigo.  Un algoritmo que es O(1) siempre sera mas rapido que un algoritmo O(n+1) aunque en este ultimo desagas los unloops y mil chorradas mas.
Las optimizaciones de codigo no sirven de nada, salvo para pretender esprimir un 2% de velocidad en algun sitio. Pero ese 2% es necio, y no cambia el orden O().

Por lo que se, en igualdad de condiciones un programa estructurado puede que sea mas rapido. Pero esto no es algo que deberia importante. Es mas importante si POO (o cualquier otro paradigma) te permite aplicar el algoritmo optimo.  POO se lo considera mas expresivo y de mayor nivel que programacion estructurada, asi que deberia ser mas facil expresar buenos algoritmos.

Para programas grandes, me parece un suicidio no usar POO.

Al ser la POO de nivel mas alto de abstraccion, a veces puede ser un mecanismo para repetir tareas innecesariamente, que es una via para hacer programas muy lentos. Asi que cuidado tambien con esto.

Posiblemente haya que echarle un ojo tambien a la gestion de memoria. Por si pudiera ralentizar los new y deletes de objetos. Que son casi consustanciales a la POO.

Y haya que tener cuidado con segun que operaciones que en POO crean copias enteras de objetos de forma automagica... y a veces invisible.

Quizas tendrias que redirigir tu pregunta a la gente de este foro que programa C++. Pues esto tienen las dos opciones POO y estructurada, y te podran decir su experiencia.

Pogacha

Escribo lo mismo varias veces de distintas formas a ver si se me entiende.

Programando en C++ tienes la ventaja de poder programar en POO y en estructurado tambien, en C solo puedes programar en estructurado.

imagina esto en ultra pseudo codigo

bucle principal:

Hacer_Algo;

Reptir 100000 de veces:  Hacer_Otra_Cosa;

ir a bucle princiapl;


"Hacer Algo" es una cosa que se ejecuta pocas veces, no vale la pena perder el tiempo en escribirlo en ASM, lo mejor es escribirlo de una forma sencilla que se entienda y se garantize su correcto funcionamiento.
"Hacer_Otra_Cosa" es una parte del codigo que se ejecutará muchas veces por frame, con lo cual a esto si conviene hacerlo que se ejecute rapido, generalmente haciendolo en C es suficiente, pero incluso podemos irnos hasta ASM dentro de un programa escrito en C++ (suponiendo que programemos para conocidas plataformas tan solo).

En definitiva la POO nos da la ventaja de escribir codigo que basicamente será no mucho mas lento pero si mas sencillo y seguro. Con las mismas tecnicas de la POO se pueden escribir cosas muy rapidas también, pero generalmente conviene hacerlas en C puesto que será mas sencillo al final. El C++ ademas de la POO nos da otras herramientas como son los templates lo cual nos ahorra un monton de escritura y también nos da mas controles para evitar algunos problemas comunes en C.

Cada lenguaje tiene sus pros y sus contras, generalmente lo que mas vale es cuanto conozcas ese lenguaje, y de ahí puede que te convenga aprender uno en particular para la aplicación que quieras hacer. Si vas a hacer juegos para PC, Linux o Mac o alguna consola, lo mejor es C++, ¿por que? por que con el puedes hacer casi todo.
Hay otros pero solo agregan limitaciones.
Hay algunos casos donde C++ no seria lo mejor:
Por ejemplo, para programar para XNA es mucho mas facil en C# que en C++, o sea, para una sola persona hacer un juego para XNA en C++ es directamente una locura, pero en C# puedes hacer algo de mediana calidad, pues tienen limitaciones que en C++ no existen pero a la vez tiene facilidades que C++ no.
Otro caso es el desarrollo para moviles donde el estandar es una variante de Java (Java es parecido en varios aspectos al C++ pero no es lo mismo)

Resumiendo ... C = estructurado, C++ = C + POO = POO + estructurado

estandart de programacion de juegos = C++

mas recursos disponibles para desarrolladores = C++

menos limitaciones = C++

mas portabilidad = C++ (en realidad el C es mas portable pero no por mucho)

Si sabes C++ entonces C no es un problema para ti, tienes que aprender un poco algunas tecnicas para suplir sus carencias.

C permite escribir codigo rapido y que haga cualquier cosa

C++ permite escribir menos codigo que haga mas y que sea mas seguro y todo lo que permitia C.

Todos los demas lenguajes tienen infinidad de carencias.

Hay otros lenguajes como por ejemplo el lenguaje D (una evolución del C++), que segun he estado chusmeando es mucho mejor a nivel programación que el C++, pero carece de recursos y comunidad y solo por eso se usa muy poco.

O sea, en realidad no creo que se pueda investigar mucho mas, si sabes un lenguaje y no quieres aprender otro, muy probablemente puedas hacer un juego con las limitaciones que este tenga. Pero si quieres hacer juegos a la larga, lo mejor es que aprendas C++.

Saludos






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.