Guía de desarrollo de juegos Indie

GreyShock

#270 Gracias por jugar tío!

Para jugar de nuevo, hay que pulsar "N". No es un juego optimizado para el público, si no tendría menú, intrucciones breves, puntos y tal xD Me he centrado simplemente en prácticar con las clases de colisiones, transformación y animaciones de Indielib.

Y en cuanto a lo de la velocidad... yo también uso velocidadX y velocidadY, lo suyo sería calcular la velocidad lineal, la verdad, como nos enseñaron en el instituto :P Así se consiguen físicas más realistas. Aunque siendo estrictos, la trayectoria no debería cambiar en Y, ya que si las palas son planas, el rebote sólo se ejerce en el eje X... tendrían que ser palas ligeramente curvas " ) ", para que desviara la trayectoria en ambos ejes.

Pero bueno, hacer un pong cutre sólo es el primer paso! :D

Cuando consiga controlar el tema de los FPS intentaré hacer un arkanoid con niveles aleatorios, para toquetear un poco el tema de instanciar objetos2D y asignarles propiedades al vuelo.

#273 ¡Gracias! Aunque sólo es una chorriprueba. A ver cuando avanzo y saco alguno con cara y ojos :P

1 respuesta
elkaoD

Si la bola no se desvía dependiendo del ángulo, este ángulo siempre será el inicial o su complementario (y por tanto, vaya peste de juego.)

No he entendido bien tu "aproximación" al juego #270, ¿puedes explicarla?

1 respuesta
luzius

#268 Me he bajado y jugado el pong y está bastante bien :D

1 respuesta
autlos

#272 Claro, una explicación guarrera:
Supongamos que la velocidad X es 6, y que la velocidad Y es 3. Si lo tomamos como un vector, el módulo sería sqrt(62 + 32), que es 6.708. Si reduces el valor de la velocidad Y, lo suyo es aumentar el de X de forma que el módulo siga siendo 6.708. Así se conseguiría un cambio en el ángulo de la bola sin que llegue a una velocidad de movimiento ridícula.

Aunque de la forma que lo ha hecho GreyShock puede tener guardados los diferentes valores de Vx y Vy en dos arrays y según en qué punto de la pala colisione la bola asignar un valor de Vx/Vy u otro.

2 respuestas
elkaoD

#274, buah, vale, el módulo de un vector, no de un escalar.

Lo había entendido como módulo % (resto) y no entendía absolutamente nada xD

1 respuesta
autlos

#275 Jajaja, lo mismo me expliqué mal, ya que son cosas que recuerdo hacer porque las sigo utilizando pero hace mucho que olvidé la teoría xD.

Por cierto #271 Lo de cambiar el ángulo al rebotar en la pala, en lugar de hacerlo en distintos puntos, quedaría mucho más guapens que fuese según el movimiento de la pala:
Si la bola viene y la pala está quieta: 90º (o sea, Vy = Vx)
Si la bola viene y la pala se mueve hacia arriba: xº
Si la bola viene y la pala se mueve hacia abajo: xº

1 respuesta
GreyShock

#274 En mi Pong como la velocidad varía dependiendo del tamaño de tu pala, puedo ignorar un poco la física xD así que la altura de la colisión define Vy y el tamaño de la pala define Vx :P

Al detectar la colisión, calculo la diferencia entre la posición en Y de la bola, y la posición en Y de la pala, y las resto.

pala.Y - bola.Y = diferencia donde golpea

como el Y de referencia de la pala lo cojo en su centro, si la bola está por encima del centro será una resta positiva, y si está por debajo, la resta será negativa.

Esa diferencia la tomo como un coeficiente de "rebote" y lo aplico a la velocidad vertical de la bola.

Cuando llegue a casa pongo el código, que no lo tengo a mano :P

#276 Lo de sumarle la "inercia" de la pala mola. De hehco yo siempre me he sugestionado en los juegos de pong pensando que le puedo dar "de rasquis" pa darle efecto xD hostias... molaría poder darle efecto a la bola pegándole 'rápido' xD

1 1 respuesta
Soltrac

#277 Yo en arkanoid siempre he hecho exactamente lo mismo de mover la raqueta pensando q le podria dar hacia donde quería xDDDD

2
GreyShock

Bueno! He conseguido montarme un sistema para luchar contra la variación de FPS en diferentes máquinas :D

Mi arkanoid ahora va igual en cualquier PC. Os comento el sistema por si a alguien le resulta útil.

Mi idea ha sido utilizar el tiempo real para calcular la velocidad de los objetos en pantalla. Con la fórmula más básica sobre la velocidad:

Velocidad = Espacio / Tiempo

El problema de los FPS viene dado por la velocidad a la que cada máquina procesa un bucle, por ejemplo:

INICIO BUCLE

BolaX = BolaX + 1

FIN BUCLE

De esta manera, cada vez que el pc ejecuta el bucle, la bola avanza 1px en el eje X. Por lo tanto, en una máquina que ejecute el bucle 5 veces en 1 segundo la bola se moverá mucho más lenta que en uno que ejecute el bucle 200 veces en un segundo.

La solución pasa entonces por usar el tiempo real. Un segundo es un segundo aquí, y en la china popular. Por lo tanto, si decidimos que nuestra bola se mueva a 20px/s, se moverá a esa velocidad en todas partes. Para "equilibrar" el tiempo en la ejecución del bucle lo que he hehco ha sido medir la variación del tiempo.

//Definimos las variables que controlarán el tiempo

TiempoTranscurrido = iniciar temporizador
ÚltimoTiempoMedido = 0

INICIO BUCLE

variaciónTiempo = TiempoTranscurrido - ÚltimoTiempoMedido

BolaX = BolaX + (variaciónTiempo * velocidadX)

ÚltimoTiempoMedido = TiempoTranscurrido

FIN BUCLE

Así que siguiendo la regla física de que:

Variación de espacio = Variación de tiempo * Velocidad

Podemos aplicar la velocidad real al juego independientemente de la máquina del usuario.

Si una máquina ejecuta el bucle 5 veces por segundo:

Variación de espacio = 0.20s * 20px/s = 4px

Si una máquina ejecuta el bucle 100 veces por segundo:

Variación de espacio = 0.01s * 20px/s = 0.2px

O lo que es lo mismo:

VELOCIDAD 20px/s = 4px / 0.20s
VELOCIDAD 20px/s = 0.2px / 0.01s

La velocidad se mantiene uniforme en ambas máquinas, en la más potente se verá más fluido, pero la experiencia de juego será la misma en las dos. Así, independientemente del cacharro del usuario, ambos verán que la bola tarda 5 segundos en recorrer 100 píxeles del escenario!

:D

Espero que os haya sido útil y haberme expresado con claridad. Parece sencillo, pero he estado un rato peleándome con el código hasta llegar a esa simple conclusión.

1 1 respuesta
elkaoD

#279 felicidades! Un pasito más hacia el zen xD

Reléete el link que te pasé y aplica todo lo que comenta sobre el timestep fijo (por lo que comentas, usas timestep variable.) En el propio post del blog comenta por qué es recomendable.

Cuando lo consigas tendrás el típico bucle de un juego cualquiera.

1 respuesta
GreyShock

#280 Guay! Me imprimiré el artículo como lectura de autobús para el lunes. De momento es que quería llegar a una solución propia simplemente por el placer de pelearme con el problema y llegar a una conclusión. Ahora viene la optimización =)

Eso del timestep variable.. a qué te refieres? a que el tiempo que mide la máquina puede diferir según el ordenador? Bueno, supongo que lo descubriré cuando me lea el artículo de marras. Muchas gracias otra vez!

1 respuesta
The-Force

Es algo básico en la programación de videojuegos.

posicion = posicionAnterior + velocidad * deltaTime

Donde velocidad son las unidades por segundo y deltaTime el tiempo transcurrido desde la ultima actualizacion.

El problema es que usar esta técnica para mover objetos hace que la física sea sensible a los fps.
No es lo mismo que gires el ratón y aparescas a 1 metro girando 45 grados, que avances medio metro gires 45º y avances otro medio metro. La distancia recorrida y el angulo girado si son lo mismo pero la posicion no lo sera. Ese es tipo de comportamiento ocurría por ejemplo en juegos como todos los quake hasta el 3 produciendo muchos efectos raros.

Para obtener una física mas realista, todos los calculos de posicion, orientacion y velocidad de objectos que afectan al gameplay se suelen hacer en un hilo aparte del de los gráficos, que asegure un numero fijo de actualizaciones por segundo, o se limitan los fps. Todo esto para asegurar un timestep fijo que no varia segun los fps.

1 respuesta
elkaoD

#281 es básicamente lo que dice #282, que la física es sensible a los FPS. Piensa que al fin y al cabo lo que estás haciendo es realizar una integración Euleriana (la ecuación que pone #282) la cuál no es perfecta.

No es lo mismo sumar 2 veces la integración de 1ms que sumar una vez la integración de 2ms (porque las ecuaciones no son lineales, como por ejemplo en la aceleración.) El error se va acumulando en la integración Euleriana (y de hecho puede crear graves problemas, por eso se usan en casos especiales donde se requiere precisión integradores avanzados como RK2 o leapfrog.) También se usas otras técnicas como integración verlet (en la que las variables están implícitas con el delta del estado anterior, no con valores inherentes a los estados a simular.)

Si ves su ecuación deltaTime es lo que se llama el time-step (pasos del tiempo, también llamado deltaTime por el dT de la integración.) El timestep variable significa que en cada ejecución de tu bucle del juego el timeStep va a tener un valor diferente (porque cada vez habrá pasado un tiempo diferente entre cada ejecución de este.)

Lo que pasa es que luego #282 se lía un poco en lo que dice xD


#282 lo que comentas del Quake no es por el timestep si no porque la física estaba mal hecha. ¡Es un bug! Lo que pasa es que llegó a ser tan característico del juego que el bug se mantuvo como una "feature", pero no tiene nada que ver con el timestep.

No encuentro la explicación del bug pero la vi en su día. Era una mezcla de un par de bugs, uno relacionado con el movimiento del ratón (te mueves más rápido en diagonal si mueves el ratón hacia la misma dirección) y otro relacionado con la fricción (que no se activaba bien la fricción al saltar justo al tocar el suelo.) Como digo, esto no tiene NADA QUE VER CON EL TIMESTEP, si no que son bugs de la propia física (y da completamente igual qué integración uses.)


Para obtener una física mas realista, todos los calculos de posicion, orientacion y velocidad de objectos que afectan al gameplay se suelen hacer en un hilo aparte del de los gráficos que asegure un numero fijo de actualizaciones por segundo. Todo esto para asegurar un timestep fijo.

¡Nope! Error. Aunque ejecutes todos los cálculos en un hilo aparte el timestep sigue sin ser fijo. Nadie te asegura que la ejecución de un hilo no se vea afectada por otros hilos. De hecho, te aseguro que se verán afectados. Y aunque no se vean afectados por otros hilos, se verán afectados por otros procesos. Y aunque no se vean afectados por otros procesos, se verán afectados por el planificador de tu SO. Por mucho que cambies tu simulación a un hilo aparte, el tiempo que pasará entre una ejecución y otra es variable.

Para obtener un timestep fijo no necesitas un hilo aparte. De hecho en los videojuegos los hilos extras se usan para cálculos que no dependan de la física o del estado del juego, como puede ser el sonido, la IA, el networking...

De hecho no vale de nada separar el estado del juego del hilo de renderizado porque no puedes renderizar más rápido de lo que cambia tu juego. Por mucho que renderices, estás dibujando frames que son exactamente igual al anterior (al no haber cambiado el estado del juego.)

El timestep fijo se consigue... fijándolo. En definitiva: tu bucle del juego no actúa hasta que no haya pasado un tiempo fijo (en XNA si no me equivoco por defecto son 16.6ms, es decir 60FPS.) Lo que haces es, mientras que el bucle se esté ejecutando y no llegue a esos 16.6ms simplemente lo ignoras y vas sumando el deltaTime en un acumulador. Una vez ese acumulador llegue a 16.6ms ya haces los cálculos pertinentes con ese deltaTime fijo.

Se presenta un caso, y es... ¿qué pasa si en el último "intento de frame" te quedas a 15.6ms y en el siguiente llegas, por ejemplo a 17.6ms? Pues que ese milisegundo que te sobra lo guardas para el acumulador para el próximo marco de juego (por lo que el deltaTime no queda a 0 al terminar la ejecución, si no a 1.)


¿Cuáles son las ventajas de hacer esto? Pues como decía antes, no es lo mismo integrar dos veces 1ms que integrar una sóla vez 2ms. ¿Qué significa esto? Pues que la simulación de tu juego dependerá POR COJONES del timeStep que vaya pasando en cada iteración, y por tanto la simulación será diferente en cada ejecución.

Para un Pong da completamente igual porque no vas a ver apenas diferencias, pero recuerda que los errores se acumulan.

¿Y qué más dará? Me dirás. Pues piensa por ejemplo que quieres hacer un sistema de grabación del partido (ej. el HLTV del Counter-Strike) o que tu juego requiere volver atrás en el tiempo (ej. el control del tiempo en Braid.) En ese caso necesitas que el timeStep sea fijo para que:

  1. En todas las máquinas se vea igual.
  2. Entre dos ejecuciones, el estado en t(n) sea el mismo dado un n.

Lo mismo para un sistema de juego en red.


(A partir de aquí caca aleatoria que no tiene que ver del todo.)

De hecho esto da muchos problemas y es la razón por la que haya problemas cuando juegas entre varias arquitecturas y fue lo que llevó al traste uno de mis proyectos.

Entre varias máquinas los números en coma flotante no tienen por qué dar lo mismo (por tema de redondeos, bits de guarda, precisión extra en estados intermedios, etc.) Los errores se acumulan, por lo que varias máquinas acababan viendo un estado del juego completamente diferente.

Esto hace que, una de dos, o haces que uno de los dos sistemas sea autoritativo (malo) y corrija a capón los "errores" del otro o usas matemática en coma fija (definida por ti, por lo que el resultado es determinista.)

1 respuesta
The-Force

#283 No estoy diciendo que separando la fisica en hilo o limitando los fps el deltaTime no varíe, sino que haciendo esto lo puedes fijar. De este modo da igual si se ejecutan incluso con menos diferencia de tiempo que el resultado es el mismo.

Hay muchas cosas que no afectan al juego y se pueden mover aparte de la fisica, como particulas y demas cosas cosmeticas... Tambien puedes interpolar la posicion de los objetos entre 2 timestep solo para renderizarlos, sin afectar a la fisica.

ahms y lo que decía del quake no era precisamente eso sino algo sobre el daño al caer, pero igual es un bug del mismo estilo como los que comentas.

1 1 respuesta
elkaoD

#284 ya pero lo que yo digo es que lo puedes fijar igualmente aunque lo tengas todo en un mismo hilo. Supongo que te he entendido mal.

En lo que sí tienes toda la razón es en lo de la interpolación y poder dibujar cosas estéticas. Lo segundo da un poco igual. Lo primero nunca me gustó del todo porque para interpolar necesitas el estado siguiente y siempre he sido de pensar que si tienes el estado siguiente... ¿por qué no lo dibujas? Vale que ir un frame atrasado visualmente no es relevante, pero cuando lo que ves no se corresponde al 100% con la física actual (porque repito, para interpolar ya hay que tener fijo el siguiente frame...) a mí siempre me ha parecido "raro".

En juegos online esto si tiene más sentido (total, estás interporlando every-fucking-where.)

Cuestión de gustos supongo xD ¡+1 por el apunte!


Por cierto, al fin he encontrado aquí la explicación técnica del strafe/circle:

http://www.funender.com/quake/articles/strafing_theory.html
http://www.funender.com/quake/articles/cj_theory.html

Es interesante (y como ves no tiene que ver con el timestep.)

The-Force

Se que me explico mal y escribo peor xD pero creo que también nombré el método de limitar los fps :(

El tema seria en cada frame hacer los calculos de la fisica, renderizar y asegurar que esto se realiza un numero fijo de veces por segundo.

Eh también puedes extrapolar aunque eso me gusta menos aun.

Yo uso Unity y no queda otra que usar interpolacion o extrapolacion para evitar que la fisica te limite los fps.

1 respuesta
elkaoD

#286 releyendo sí lo comentaste, pero lo entendí como una conclusión cuando lo dijiste como un complemento.

Si la física te limita los FPS estás haciendo algo mal...

...o estás haciendo el último grito en simulación, en cuyo caso interpolar sóla va a ralentizar aún más.

Hay gente que sí le gusta. Como te digo a mí me parece que no ayuda (¿realmente ves la diferencia a 60FPS?) y te complica la vida.

1 respuesta
The-Force

#287 Si tu cámara sigue a un objeto que se mueve 50 veces por segundo, tambien la camara se movera 50 veces por segundo y por muchos fps que dibujes... Tu mismo lo dijiste. Por eso los rigidbody en unity tienen la propiedad de ser interpolados o extrapolados o nada.

De este modo si pongo el objeto al que sigue mi cámara con interpolación pues mejora considerablemente.

Yo lo noto mucho realmente. Soy de esos que jamas han entendido como la gente dice que no se notan menos de x fps. Lo que si que no he notado es el lag por la interpolación. Son 0,02 segundos de timeStep asi que no es mucho.

GreyShock

Madre mía, menudo diálogo de alto nivel :P

¿Se podría saber que estáis estudiando o qué estáis haciendo para llegar a esos niveles de conocimiento del medio?

Ayer me devané los sesos para estabilizar los FPS (me algero de haber llegado a una conclusión cercana a la buena =P) y, en vista de que es una ciencia tan estudiada ya como lo veo que está... ¿Los engines no incorporan ya un control de FPS? ¿Esto debería estar optimizadísimo en engines pros como Unity no? ¿O tenéis que controlarle manualmente de todos modos?

Mi proyecto grande es un juego en el que las partidas podrán ser muy largas, así que no puedo permitirme esa mencionada acumulación de errores. Estudiaré bien a fondo todo lo que comentáis.

2 respuestas
elkaoD

#289 pues yo estudio Ing. Informática pero todo esto lo sé de antes de meterme en la carrera (el periodo de mi vida en el que menos estoy aprendiendo, debo decir... embota la mente, quita tiempo...)

En efecto, en los engines todo esto viene abstraído (en los frameworks, no en las librerías), pero siempre he sido de opinar que cuando trabajas en alto nivel sin conocer lo que pasa a bajo nivel te pierdes aspectos importantes.

Lo de los errores da un poco igual en un juego single, así que es lo de menos (aunque viene bien ir acostumbrándose.) En los 90's creo que todos los juegos llevaban el timestep variable y nadie se daba cuenta.

1 respuesta
Potito

#289 Perdona si soy demasiado brusco pero estas meando contra el viento, estas haciendo frente a problemas q estan solventados desde hace mucho en cualquier framework actual. Usa librerias o cualquier programa tipo gamemaker si lo q quieres hacer son juegos. Y dedicate exclusivamente a ser creativo, no a reinventar la rueda, te lo digo como critica constructiva.

Es decir, si un tio se ha dedicado 2 años a contruir un sistema que crea nubes reales y muy bonitas, coge el script y usalo, no pierdas 2 años en conseguir lo mismo. Paga esos 10 euros q te pide si hace falta, porq seran los 10 euros mejor invertidos de tu vida si lo q quieres es tener esas nubes en tu juego.

1 2 respuestas
autlos

#291 Discrepo. Tienes razón en que es una tontería reinventar la rueda, pero hay cierto placer en descubrir uno mismo cómo se hace algo. Por no decir lo que ayuda comprender DE VERDAD el funcionamiento de las cosas.

6 1 respuesta
GreyShock

#290 chachi :D Y en lo que comentas de la carrera... yo igual, he aprendido mucho más fuera que dentro... aunque reconozco que si no la hubiera hecho no me hubiera adentrado tanto en el mundo del desarrollo.

#291 Muchas gracias por el consejo, realmente me pillaré un buen engine cuando quiera hacer algo que vaya a "lanzar al mundo". Pero por ahora no creo que esté meando contra el viento. Cuando me meta a desarrollar un proyecto pepins pues ya utilizaré todas las soluciones que la comunidad ha perfeccionado a lo largo de los años. Tengo clarísimo que no voy a recorrer el camino desde el pong hasta el crysis en un par de tardes, ni una vida siquiera. Pero como bien dice #290 me mola saber como funcionan las cosas, y no pensar que mi juego se mueve por magia. Estos días peleándome con este pong salchichero han sido bastante didácticos.

El Game Maker precisamente me echó para atrás por la mítica frase de "no hace falta saber programar!", a mí me parece (no lo he probado) el equivalente al dreamweaver en cuanto a desarrollo web. No desprecio el Game Maker y su propósito, por mera cuestión personal prefiero no abstraerme tanto del código que mueve mi juego.

Total, que estoy orgulloso de haber llegado a la conclusión del delta time sin saber nada de él xD Y por pasta no es, no me duele comprar código o engines. De hecho tengo pensado hacer una inyección bastante bestia de dinero para montar el juego tocho (pagando artistas y música inclusive...) Pero bueno, todo se andará. Ahora me dedico a ahorrar todo lo que puedo mientras compagino mi trabajo con empaparme del mundo del desarrollo de videojuegos. ¡Es cuestión de fuerza de voluntad!

2
GreyShock

Hola a todos, muy buenas noches (Salvador Raya style)

Continúo con mi aventura Indie y regreso a informar de mis avances, y lo que es mejor, mis impedimentos xD

Me he metido a desarrollar un jueguecito algo más original, con objetivo de pulirlo bien y hacer un minijuego con cara y ojos. Sin entrar en detalles, la mecánica se basa en manejar un personajillo mientras llegan enemigos de todas partes de forma infinita, en plan resistir oleadas, y con puntos que consigues al derrotarlos puedes ir creando torretas y consiguiendo otros power ups y ayudas para ir haciendo frente a los siguientes. Una especie de Action Tower Defense.

El caso es que estaba prototipando el juego. He conseguido meter al prota en la pantalla y aplicarle unas modestas físicas de salto, movimiento y "esquivas" rodando por el suelo. Las idea es que vaya con WASD + ratón. Con el ratón apuntas y pegas tiritos.

http://www.mediafire.com/?rzbfla0447gpr63

Para rodar es agachándose y apretando izquierda o derecha (S+A o S+D)

Hasta ahí genial. El problema llega cuando quiero... disparar. Lo ideal es definir una clase "Bala" para ir instanciándola y tener balitas por ahí rondando. Pues... me veo ante todo un mundo que explorar en cuanto a clases en C++. He comprendido lo básico y puedo seguir los ejemplos más sencillos. Sin embargo, el problema viene cuando la clase "bala" también tiene que beber de clases propias de Indielib, es decir, para crear una entidad 2d llamas a la susodicha clase del framework y así cargas tu objeto en pantalla. Lo que quiero es al crear un nuevo objeto bala, cargue una objeto de entidad2d asociado a la bala, y además aplicarle mis físicas... y el inception de cargar un objeto dentro de un objeto ya me viene grande. Me peta por todas partes.

Ya me sé todo el rollo sobre reinventar la rueda y tal... pero me molaría sacarlo por mis propios medios el juego, entre muchas comillas.

Qué tutoriales, o libros, sobre OOP en C++ me recomendáis? Qué consejos podéis darme? Sé que ya se han recomendado muchos manuales. Pero me gustaría contar con un poco de ayuda para saber a cual atacar.

¡Muchas gracias!

1 respuesta
elkaoD

#294 por decir alguno, Effective C++ de Scott Meyers.

Más que de OOP es precisamente de sacarle el jugo a C++ en concreto (un lenguaje muy "suyo" pa' lo bueno y pa' lo malo.)

Con respecto a lo de las balas, te recomiendo que hagas una piscina de objetos y los reutilices. En C++ es menos importante que en Java (por aquello de que tú controlas la memoria y no el GC) pero aún así es una buena práctico IMO.

el inception de cargar un objeto de un objeto ya me viene grande. Me peta por todas partes.
No veo el problema. En el constructor construyes el objeto "externo" y en el destructor lo destruyes.

1 1 respuesta
djtonight

Opino como GreyShock, el Unity es la hostia, pero para hacer algo 2D tiene que haber algun motor más especifico por ahí.
para hacer juegos estilo angrybirds, whereismywater, etc...totalmente planos
¿alguien sabe cual?free?

2 respuestas
GreyShock

#296 Yo estoy utilizando Indielib. No tiene interfaz gráfica, es todo picando código a pelo, pero sabiendo lo básico de C++ (yo sabía menos que eso y he conseguido pillarle el punto) montar cualquier jueguecito en 2D es un momento. Está orientado a2D o a 2.5D, pero vaya que la mayoría de los tutoriales de la guía están enfocados al 2D.

De indielib me ha gustado las facilidades que da para tratar imágenes, iluminación y efectos, y sobre todo el sistema de colisiones, que se basa simplemente en dibujar polígonos encima de tus figuras y el resto viene con un simple if isCollision.

Lo malo, es que los juegos resultantes sólo sirven para PC windows (obtienes .exe). He visto varios juegos hechos con Indielib exportados a multiplataforma, pero no sé cómo habrán llegado a ese punto ya.

Sin embargo, a pesar de lo fluido que es el desarrollo, me da la sensación de que no es la mejor opción, ya que partiendo de su motor montas el juego desde cero, y no tienes añadidos como otros engines que ya te controlan los FPS, o contarán con métodos propios para instanciar objetos del juego y tal.

Resumen: Indielib era una herramienta de puta madre para desarrollar juegos en 2D a pelo.

La recomiendo para aprender, porque estoy aprendiendo mogollón peleándome con ella, pero estoy seguro de que habrá algún engine 2D mucho más optimizado por ahí. En posts anteriores recomendaron Slick2D y BennuGD, que no sé qué tal andarán. Si les echas un vistazo pásame un informe ;)

PiradoIV

#296 Quería hacer un hilo específico, pero ya que lo preguntas... http://www.stencyl.com/

1 respuesta
Meleagant

#292 La cuestión es si tu objetivo principal es aprender o crear.

1 respuesta
GreyShock

#298 "Design award winning games faster, without code"

Vaya puta mierda de lema macho, en serio. Me dan mucha rabia. Y encima en portada un clon de Angry Birds.

¿Tú lo has probado? ¿Sirve para algo más que para hacer clones de otros juegos?

[...pasada la ira...]

Investigándolo un poco veo que tiene editor de código y tal... pero es que quiero rehuír de los generadores. Estoy mu loco! xD El proyecto que tengo en mente, a parte de que tiene que ser para sobremesa sí o sí, necesita una personalización muy peculiar, y no me basta con meros editores...

Esó sí, para sacqr apps para el móvil como churros tiene buena pinta y la interfaz es bastante molongui :3

1 respuesta
Tema cerrado