Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Consejos y propuestas para acometer la programacion de un input manager

Iniciado por kanc, 03 de Diciembre de 2013, 03:58:07 PM

« anterior - próximo »

kanc

Hola,

Estoy iniciandome en esto de la programacion de videojuegos y me gustaria que me dierais un par de consejos o algun libro, articulo, etc... donde poder consultar

Seria acerca de programar una clase input manager que se encargue de gestionar la entrada de datos, teclado, raton, pad para modificar la logica del juego.

Mi "gestor de ventana" va a ser GLFW ya que lo estoy haciendo con OpenGL y C++

¿que os parece mas adecuado polling o callbacks?? hay mucha diferencia de rendimiento?

gracias!

TrOnTxU

Yo simpre suelo tirar de pooling en mi input manager.

De todas formas utilizo un par de clases para abstraer los datos y implementaciones de clases que gestionan los "devices": pads, mouses, teclados, touch screens, etc.

Aparte, utilizo "C Opaque Pointers" para los datos especificos de plataforma, y tengo implementaciones distintas para cada plataforma: dxinput para windows, X11 para linux, cell library para PS3, etc.  En las plataformas que funcionan con callbacks "a la fuerza" (como en Android o Cocoa) relleno un estructura de datos (especifica por plataforma) conforme me llegan los callbacks, y luego lo gestiono en el update de la clase del device concreto.

Tambien tengo la opción de utilizar "channels" para "mappear" entradas (botones, teclas, ejes del raton, ejes de los joysticks, etc.).

Por encima de todo esto lo normal es crearte gestores de más alto nivel (aqui solo suele haber uno multiplataforma que utiliza las clases especifcas anteriores) para detectar combos, chords, gestures, etc.

Todo esto lo mejor es crearlo poco a poco y de manera incremental conforme vas necesitandolo.

En cuanto a referencias, no conozco un libro que trate el tema exahustivamente, pero el "Game Engine Architecure" de Jason Gregory tiene un capitulo dedicado a esto (aunque sin mucho ejemplo de código, más que nada conceptos).
Luego creo recordar que habia alguna implementación hecha en algún Game Programming Gems, pero no me hagas mucho caso tampoco.

La otra opción es ir mirando ejemplos en mototres Open Source. Te recomiendo empezar por Ogre3D que siempre es un buen punto de partida para comenzar a investigar.

Bueno, espero haberte ayudado.
Un saludo, y suerte :)
Vicent: Linked-In  ***  ¡¡Ya tengo blog!!

Gallo

Creo que GLFW funciona con callbacks con lo que callbacks habrá si o si, pero puedes hacer lo que ha mencionado TrOnTxu, de guardar el estado del input en base a lo que te salta en los callback y luego hacer lo que corresponda con esa información guardada en el update.

De libros yo me he leido ese mismo también, el Game Engine Architecture, si lo vas a pillar, a mediados del año que viene creo que va a salir una segunda edición con información adicional sobre consolas de nueva generación y el desarrollo de The last of Us.

Como programación en general de C++ te recomendaria "Effective C++ 3rd edition", no es un libro sobre programación de videojuegos, pero si alguna vez te hacen un examen de C++ para entrar en una empresa de videojuegos, la mayoría de cosas estarán en ese libro.

También te recomiendo aprender como funciona y luego mirarte las entrañas de frameworks como cocos2d-x, es un muy buen ejemplo.  Por supuesto en general te recomiendo empezar por el 2D.

kanc

Hola!

Perdonad el retraso en contestar!! estaba un poco liado y casi se me habia olvidado mi post... :-[

Vaya par de respuestas!! muchisimas gracias! la verdad es que van a ser muy muy utiles! me parece una buena idea capturar todos los eventos via callback en un buffer cada refresco de pantalla y luego actuar en consecuencia. Estuve leyendo un articulo en el que decian que para juegos funciona mejor el polling, no en rendimiento, pero si en respuesta. Segun crei entender el polling tiene su propio "hilo" activo en la CPU y por lo tanto al hacer la peticion tiene respuesta automatica. Por el contrario el callback va un poco su bola sin ocupar tiempo de CPU pero claro, eso tambien tiene el punto negativo de que cuando el procesador te hace saltar el callback igual ha pasado un poco de tiempo.

Como me recomiendas Gallo, estoy empezando por el 2d aunque use OpenGL, asi que supongo que tanto el rendimiento como el tiempo de respuesta me van a dar un poco igual con los procesadores de hoy en dia.

Muchas gracias tambien por los libros que me recomendais, voy a ver si en pack publising los encuentro!

Por cierto Trontxu, pedazo de input manager que tienes montado jejeje! una pregunta... dxinput vale para cualquier pad en windows? o solo para el pad de la 360??

Un saludo y de nuevo mil gracias!

[EX3]

Cita de: kanc en 12 de Diciembre de 2013, 04:59:11 PM
una pregunta... dxinput vale para cualquier pad en windows? o solo para el pad de la 360??
dx_Input vale para cualquier pad, ademas de darte acceso al teclado. XInput solo vale para los pads de XBox 360.

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

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






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.