Volver 3DG > Informática y Tecnología > Software > Programación
Registrarse FAQ Listar Miembros

Programación >  

[Game Dev] Mapeo del input

Participa en el tema [Game Dev] Mapeo del input en el foro Programación



Sección Descargas Online - Bajá las últimas demos, mods y patches
Discusión cerrada
 
LinkBack (2) Herramientas Modo de visualización
Viejo 16-09-08, 11:02 PM   #1
Ya la cacé chief
 
Registración: Dec 2003
Mensajes: 217
[Game Dev] Mapeo del input

Hola, reconozco que no googlie esto aun pero mando el post. Seguro alguno tendra alguna idea copada para hacer esto.

El problema es mapear las teclas del teclado por ejemplo a acciones particulares del juego, pero que en distintas partes del juego una misma tecla tiene diferentes acciones asignadas. Por ejemplo, si el personaje esta caminando y presiona la barra espaciadora dispararia su arma, en cambio si esta en un auto dispara las armas del auto (tipo GTA).

Suponiendo que estas acciones estuvieran asignadas a metodos diferentes, incluso de objetos diferentes, como hacer para mapearlas desde el punto de lectura del input a los diferentes metodos?

Actualmente lo tengo hecho de una manera medio moncha, los objetos que pueden recibir input implementan una interfase con metodos virtuales y el objeto que lee el input tiene un puntero al objeto que desea controlar (el que recibe input). El problema de esto es que no todos los objetos "disparan", "saltan" o se "mueven", sino que puede darse el caso de que un objeto controlable pueda saltar (una persona por ejemplo) pero otro no (un auto). Es por eso que mi interfase posee funciones con nombres como "customAction1" y cada objeto la implementa como desea. Deja mucho que desear, por eso estoy preguntando por aca.

Se me habia ocurrido usar punteros a funciones, pero no es algo que sepa manejar completamente. O sea, dependiendo del tipo de objeto controlable que sea (lo discierne con un switch o algo por el estilo), la clase que lee el input elige un set de punteros a funciones para aplicarlos en la lectura. (Cada item del set tendria dos campos: tecla y puntero a funcion).



Alguien tiene alguna idea para resolver este problema?

PD: Se puede asignar a un puntero a funcion una funcion que pertenece a un objeto aun no creado?.
__________________
Clean
XGamer? está desconectado  
Viejo 17-09-08, 01:12 AM   #2
Advocatus Diaboli
 
Avatar de Dr.D
 
Registración: Feb 1984
Ubicación: Mi laboratorio secreto
Mensajes: 19,203
Re: [Game Dev] Mapeo del input

Usa eventos. El teclado lo lees desde un lado, y cada objeto sabe que input quiere y se subscribe al coso que lee el teclado diciendole que teclas quiere.


Citar:
Mensaje original enviado por XGamer? Ver Mensaje
PD: Se puede asignar a un puntero a funcion una funcion que pertenece a un objeto aun no creado?.
En C++ si, pero no te voy a decir como, seguro que para lo que pensás que necesitas eso, esta mal.
__________________
Dura lex, sed lex.
Mi laboratorio secreto
Dr.D está desconectado  
Viejo 17-09-08, 10:03 AM   #3
Mewtwo's Trainer
 
Avatar de S h u a n K
 
Registración: Jul 2007
Mensajes: 2,337
Re: [Game Dev] Mapeo del input

Deberias usar una FSM para esto, cada objeto recibe el input, y segun el estado de la FSM haces tal o cual cosa.
S h u a n K está desconectado  
Viejo 17-09-08, 12:05 PM   #4
Gracias IOmega666 :3
 
Avatar de LuiGGi
 
Registración: Apr 2003
Ubicación: Rosario
Mensajes: 4,841
Re: [Game Dev] Mapeo del input

No dije nada, me respondí con lo de D :P
__________________
nosotros somos inmortales, somos gamers, tenemos muchas vidas, un gamer no muere, respawnea

Comunidad Gamer Argentina: facebook.com/group.php?gid=38506797092

Última edición por LuiGGi : 17-09-08 el 12:37 PM.
LuiGGi está desconectado  
Viejo 17-09-08, 12:27 PM   #5
Advocatus Diaboli
 
Avatar de Dr.D
 
Registración: Feb 1984
Ubicación: Mi laboratorio secreto
Mensajes: 19,203
Re: [Game Dev] Mapeo del input

Citar:
Mensaje original enviado por LuiGGi Ver Mensaje
Usar un observer en POO sería lo correcto?...

sería una clase que lee el input y tiene registrado diferentes listeners, y si apretás la E, llama a los eventos de los listeners que se registraron para la E?...
Sep, los famosos pares emitter/sink...

Citar:
Mensaje original enviado por Shuankete Ver Mensaje
Deberias usar una FSM para esto, cada objeto recibe el input, y segun el estado de la FSM haces tal o cual cosa.
¿No mandas notificaciones al pedo así? Imginate que tenes 10000 objetos y solo 1 va a procesar el ESC, hiciste 9999 llamados al pedo.
__________________
Dura lex, sed lex.
Mi laboratorio secreto

Última edición por Dr.D : 17-09-08 el 12:28 PM. Motivo: Mezclado automatico de Posts
Dr.D está desconectado  
Viejo 17-09-08, 12:30 PM   #6
Mewtwo's Trainer
 
Avatar de S h u a n K
 
Registración: Jul 2007
Mensajes: 2,337
Re: [Game Dev] Mapeo del input

Citar:
Mensaje original enviado por Dr.D Ver Mensaje
¿No mandas notificaciones al pedo así? Imginate que tenes 10000 objetos y solo 1 va a procesar el ESC, hiciste 9999 llamados al pedo.
Me exprese mal.

No me referia a que cada evento sea enviado a todos los objetos.

Sino a que sea enviado a quien es debido, y dependiendo de el estado de ese objeto, y sus capacidades, salte, corra, o lo que le corresponda hacer.
S h u a n K está desconectado  
Viejo 17-09-08, 01:58 PM   #7
Ya la cacé chief
 
Registración: Dec 2003
Mensajes: 217
Re: [Game Dev] Mapeo del input

Citar:
Mensaje original enviado por Dr.D Ver Mensaje
Usa eventos. El teclado lo lees desde un lado, y cada objeto sabe que input quiere y se subscribe al coso que lee el teclado diciendole que teclas quiere.
.
Entiendo, pero de esta manera el procesamiento de que tecla fue la presionada seria trabajo del objeto receptor, algo asi como un switch de la tecla que viene por parametro en el evento. Esto es lo que buscaba evitar, me imagine que capaz habria alguna manera de hacerlo...

Por otra parte, cada vez que se presiona una tecla el objeto lector de input deberia revisar todos los conjuntos de teclas por cada objeto registrado para ver a que objetos le interesa la tecla presionada, aunque no son conjuntos de gran tamaño.


La forma mas correcta, por decirlo de alguna manera, seria usando eventos entonces?
__________________
Clean
XGamer? está desconectado  
Viejo 17-09-08, 04:17 PM   #8
Gracias IOmega666 :3
 
Avatar de LuiGGi
 
Registración: Apr 2003
Ubicación: Rosario
Mensajes: 4,841
Re: [Game Dev] Mapeo del input

Citar:
Mensaje original enviado por XGamer?
Entiendo, pero de esta manera el procesamiento de que tecla fue la presionada seria trabajo del objeto receptor, algo asi como un switch de la tecla que viene por parametro en el evento. Esto es lo que buscaba evitar, me imagine que capaz habria alguna manera de hacerlo...
El procesamiento de la tecla (ver qué tecla es, si es una A o una Z) es el Subject, una clase que se encarga pura y exclusivamente de recibir la info del teclado... Según la tecla que recibe, dispara eventos en algunos de los listeners que registraste...
Ese "switch" que vos decís no es parte del 'receptor' (clase sprite por ej), sino del subject. ("objeto lector del input")...

Citar:
Por otra parte, cada vez que se presiona una tecla el objeto lector de input deberia revisar todos los conjuntos de teclas por cada objeto registrado para ver a que objetos le interesa la tecla presionada, aunque no son conjuntos de gran tamaño.
Creería que no, parece más eficiente almacenar los listeners registrados por tecla, de manera tal que cuando recibís la tecla A, automáticamente disparés los eventos de los listeners que se registraron para A... Evitás tener que revisar toooodos los listeners y fijarte a qué se registraron...

un hashmap puede ser una posibilidad?
__________________
nosotros somos inmortales, somos gamers, tenemos muchas vidas, un gamer no muere, respawnea

Comunidad Gamer Argentina: facebook.com/group.php?gid=38506797092
LuiGGi está desconectado  
Viejo 17-09-08, 04:39 PM   #9
Advocatus Diaboli
 
Avatar de Dr.D
 
Registración: Feb 1984
Ubicación: Mi laboratorio secreto
Mensajes: 19,203
Re: [Game Dev] Mapeo del input

Citar:
Mensaje original enviado por XGamer? Ver Mensaje
Entiendo, pero de esta manera el procesamiento de que tecla fue la presionada seria trabajo del objeto receptor, algo asi como un switch de la tecla que viene por parametro en el evento. Esto es lo que buscaba evitar, me imagine que capaz habria alguna manera de hacerlo...
Hay varias formas de evitar el switch, sin embargo dudo que valgan la pena. Dentro de cada objeto solo tenes las posibilidades que manejas, no las 101 teclas posibles.

Citar:
Mensaje original enviado por XGamer? Ver Mensaje
Por otra parte, cada vez que se presiona una tecla el objeto lector de input deberia revisar todos los conjuntos de teclas por cada objeto registrado para ver a que objetos le interesa la tecla presionada, aunque no son conjuntos de gran tamaño.
No, para eso sirven las subscripciones a eventos especificos. Tenes varias listas de listeners segun la tecla o grupo de teclas. Recibis el input, buscas la lista de listeners, los llamas a todos.

Citar:
Mensaje original enviado por XGamer? Ver Mensaje
La forma mas correcta, por decirlo de alguna manera, seria usando eventos entonces?
Es una de las tantas formas. Lo "correcto" depende del contexto.

Citar:
Mensaje original enviado por LuiGGi Ver Mensaje
un hashmap puede ser una posibilidad?
Solo hay ~100 teclas posibles. Un array de listas simplemente linkeadas es lo mas practico en términos de performance y espacio.
__________________
Dura lex, sed lex.
Mi laboratorio secreto

Última edición por Dr.D : 17-09-08 el 04:41 PM. Motivo: Mezclado automatico de Posts
Dr.D está desconectado  
Viejo 17-09-08, 06:18 PM   #10
Gracias IOmega666 :3
 
Avatar de LuiGGi
 
Registración: Apr 2003
Ubicación: Rosario
Mensajes: 4,841
Re: [Game Dev] Mapeo del input

Citar:
Mensaje original enviado por Dr.D Ver Mensaje
Solo hay ~100 teclas posibles. Un array de listas simplemente linkeadas es lo mas practico en términos de performance y espacio.
Ahora que lo decís es muy obvio, no sé por qué no me di cuenta que no podés tener más de 100 inputs diferentes...
__________________
nosotros somos inmortales, somos gamers, tenemos muchas vidas, un gamer no muere, respawnea

Comunidad Gamer Argentina: facebook.com/group.php?gid=38506797092
LuiGGi está desconectado  


Discusión cerrada


Herramientas
Modo de visualización


LinkBacks (?)
LinkBack a este Tema: http://foros.3dgames.com.ar/programacion.97/482890.game-dev-mapeo-input.html

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
Copyright 1999-2009 3DGames Argentina - Todos los derechos reservados.