Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Delegados. Una forma de ordenar una accion y despues ejecutarla

Iniciado por Arthur15, 03 de Mayo de 2019, 01:52:11 AM

« anterior - próximo »

Arthur15

Por ejemplo en el update se compila en tiempo por frame.  Pero yo deseo darle una orden a un jugador y despues si clickeo un boton este realiza esa accion,.  Moverse a ese punto.  Después atacar o al revés atacar y despues moverse.

TrOnTxU

Vaya, demasiada información (es broma  ;))

Podrias poner al menos poner el lenguaje y el framework y especificar un poco la pregunta.

"Por ejemplo en el update se compila en tiempo por frame." soy un poco burro, pero no tengo ni idea a que te refieres. ¿Compilar durante el frame supondria que tienes algun lenguaje interpretado y lo estas pasando a bytecode?

Bueno asi en general, independientemente del lenguaje se podria hacer una cola de acciones y ahi encolar todas las que quieras, siempre puede haber una que al encolarse vacie primero la cola (una accion que cancela las demas acciones en curso).
Las acciones pueden ser desde identificadores a callback pointers, functors, o delegados, o lo que tu veas que tiene el lenguaje que estás utilizando (como has dicho delegados supongo algo asi como C# y me arriesgo a decir que estas en Unity3D :P suposiciones )

Si lo que quieres es mas o menos algo parecido a un sistema de microturnos de un RTS (Starcraft/Warcraft, Age of Empires, etc.) por ejemplo, hay un articulo muy bueno sobre el tema, y aunque está principalmente orientado a la implementación del funcionamiento de la red, la PRIMERA PAGINA, explica por encima el sistema de microturnos, las formas de encolar acciones, como resolverlas, etc. desde el punto de vista de como lo implementaron en el Age of Empires : https://www.gamasutra.com/view/feature/131503/1500_archers_on_a_288_network_.php


Bueno, espero haber sido de ayuda.
Un saludo.
Vicent: Linked-In  ***  ¡¡Ya tengo blog!!

Arthur15

Si.   Tu suposición es cierta.  Hablo del lenguaje. C# y básicamente trabajo en unity.  Mas menos el asunto es que estoy en la celda 4,2 y selecciono una celda destino.  Con un script de busca camino me genera una lista de celdas la cuales seguira.  Utilizando una lista de lista.  Puedo guardar los diferentes puntos a donde se movilizara el personaje. Despues de que con un boton inicie el turno.  Tengo un metodo que hace que el personaje realice un ataque.  Pero no puedo agregar ese metodo a la lista porque es una list de list.  Entonces los delegados me podrian funcionar ya que veo se pueden agregar métodos a ellos que tengan los mismos parámetros de entrada y de salida. 

TrOnTxU

Son dos cosas diferentes.

Necesitaras una Cola (Queue), que tambien puedes implementar un List,  para tus "Acciones de Juego".

class IGameAction
{
  abstract virtual bool execute_action_frame();
   // Más cosas
};

List<IGameAction> m_actionList;


Cada accion la podrias definir como una clase derivada.
Y la lista de puntos seria especifica de la accion de moverse,


class MoveAction : public IGameAction
{
List<Points> m_cellList;
// Mas cosas
};

class AttackAction : public IGameAction
{
// Codigo especifico de ataque
};



El código es pseudo codigo inspirado en C#, pero no sé si se entiende la idea.

Pongo la propuesta de que utilices polimorfismo pero lo puedes hacer con estructuras de datos "más POD" e identificadores.
Vicent: Linked-In  ***  ¡¡Ya tengo blog!!

Arthur15

Gracias.  Lo implementare,  me has dado la idea.  Si puedo hacerlo subire un poco video de como quiero sea.






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.