Qué es más correcto a la hora de diseñar la UI (JS)

bultack

Tengo una duda acerca de cuál es la mejor forma de diseñar las interfaces de los juegos hechos en Javascript y me gustaría saber qué opináis los que tenéis más experiencia en este campo.

Desde mi punto de vista, creo que resulta mucho más fácil hacer las interfaces en HTML y CSS ya que a la hora de añadir algún evento (click, keypress, keyup, etc...) resultará más fácil hacer el listener. No sé si con Javascript habría alguna forma posible de hacer esto (y no me refiero a crear los elementos HTML de forma dinámica).

14 días después
willy_chaos

Con JS si no recuerdo mal, si usas jQuery una vez creado el elemento, simplemente le añades el listener como a cualquier otro ya existente

Ej a un boton
$( "#target" ).click(function() {
alert( "Handler for .click() called." );
});

1 respuesta
bultack

#2 Ya, eso sí lo controlo. Pero el tema está en que si tienes que diseñar una interfaz gráfica la haces con HTML y CSS o lo haces todo en el canvas con JS?

1 respuesta
Wasd

#3 Te faltó la palabra mágica "canvas" en #1.

Es muy probable que varios frameworks de videojuegos JS te den herramientas para hacer la interfaz en el canvas.

Si haces el juego a pelo seguramente te sea mucho mas sencillo hacerlo con HTML y CSS, aunque a mi personalmente no me atrae la idea de utilizar "tecnologias" tan diferentes para algo que forma parte del propio juego (o lo que sea).

1 respuesta
bultack

#4 Eso parece jeje

Aun no he llegado a probar ningún framework pero estuve leyendo un libro sobre desarrollo de juegos con JS y el autor utilizaba HTML y CSS para diseñar las interfaces de los juegos y no hace mucho encontré un juego hecho con vanilla javascript y me pareció que iba excesivamente lento. No sé si el tema de tener que incluir en el bucle de renderizado todo el tema de interfaz puede dar un rendimiento óptimo a los juegos

1 respuesta
Wasd

#5 No se si hasta ahora se ha hecho el experimento con canvas, pero hay frameworks JS como Angular o React si no me equivoco que mantienen un modelo persistente de datos entre la lógica y la vista.

En otras palabras, no tendrías que meter la interfaz en el bucle de renderizado sino que la interfaz por si sola ya estaría atenta a los cambios que ocurren durante la ejecución de la lógica del juego.

Con lo cual podrías controlar lo que se muestra y lo que no como una máquina de estados (solo asignas el valor a la variable, la interfaz ya cambia sola), y lo mismo con datos dinámicos tipo puntuación del jugador, contadores varios, tabla de records, etc...).

1 respuesta
bultack

#6 Interesante. No había caído que también sería posible utilizar Angular o React. Angular lo conozco un poco pero no lo había enfocado nunca a los videojuegos, tendré que investigar sobre ello

salchi12

Si quieres hacer juegos con JS te sale bastante mejor usar un framework que hacerlo a pelo. Tienes por ahí un montón. Yo te recomiendo Phaser (gratuito) e Impact (de pago). Y, sobre la UI, me parece mucho más lógico hacerla dentro del canvas.

1 respuesta
B1x1t0

Yo creo que lo primero es que vieras la diferencia entre: HTML5, CSS3 y JS.

PD: Phaser. Y si eres un temerario y un hombretón de la vida: PIXI.

1 respuesta
bultack

Os dejo el enlace del primer juego que te enseña el autor del libro que he estado leyendo.

#8 Ya, si utilizo un framwork ya puedo empezar con lo que interesa. Simplemente tengo curiosidad por saber cómo es mejor hacer la interfaz.

#9 Si la diferencia la sé.

Pero no sé, si el juego va a ser a pantalla completa no sería mejor añadir toda la interfaz (cuando hablo de interfaz me refiero al tema de botones y menús) en HTML y posicionarla utilzando CSS y con JS crear variables de los elementos de la interfaz? Si la haces con la funcionalidad de dibujo JS no se tendrían que posicionar mediante cálculos y luego determinar si el clic se ha hecho en una zona determinada por (x1,y1) y (x2,y2)?

Puyover

Pues depende de las facilidades que te aporte el framework, eso ya va a gusto; si quieres mostrar por ejemplo los botones del "pad" en móviles utilizando el dibujado del propio canvas o superponiendo elementos HTML.

Usuarios habituales

  • Puyover
  • bultack
  • B1x1t0
  • salchi12
  • Wasd
  • willy_chaos