PRGs
>> PRGs >> Cómo usar puntos de control by Wakroo.

Una de las posibilidades que da Fenix y que mucha gente no conoce son los puntos de control. Pueden resultar muy útiles para algunas cosas y ahorrar mucho trabajo. ¿Y qué es un punto de control? Bueno, se trata de unas coordenadas marcadas en un gráfico. Por ejemplo, el punto de control 0 está definido en todos los gráficos y se refiere al centro del gráfico. Por defecto está en el centro del gráfico, pero lo podemos cambiar a donde queramos que esté el centro (que no tiene porqué ser el medio). Por ejemplo, se puede poner en la punta del gráfico que va a hacer de ratón y así que realmente esté apuntando a donde el usuario quiere apuntar. Otra opción muy utilizada es poner el centro en los pies de los muñecotes en juegos de plataformas. De esta manera da igual la altura del bicho a la hora de comprobar si está en el suelo o no, ya que estaremos refiriendo todo con respecto a los pies.

Pero los puntos de control tienen más utilidades a parte de definir el centro, ya que se pueden definir más. El 0 tiene que estar definido en todos los casos, ya que si no el intérprete no sabrá dónde poner el gráfico, pero el resto son opcionales. Por lo tanto, se podría definir el punto de control 1 para marcar la cabeza del tipo en un juego de plataformas y comprobar si se choca contra el techo. O marcar dónde queda la mano para que salga el disparo de turno.

Estoy seguro de que pensaréis que eso mismo también se puede hacer desde el código, pero los puntos de control tienen ventajas. La primera y más obvia es en el caso de que queráis cambiar el gráfico. Si habéis definido por programación que el disparo sale 5 puntos a la derecha y 15 arriba del "centro" (que no tiene porqué ser el medio) del gráfico del protagonista y cambiáis el gráfico probablemente tengáis que cambiar esos valores. Pero si le decís que lo saque a partir del punto de control 1 os bastará con definir ese punto de control en el nuevo gráfico y no tendréis que tocar el código para nada. Por esta misma razón también se simplifican las cosas si tenéis varios protagonistas para elegir, ya que hacéis un único código dependiendo de los puntos de control y luego hacéis todos los gráficos que queráis, que las cosas se ajustarán a lo que vosotros necesitáis (siempre que las hayáis hecho bien, claro).

Bueno, ¿y cómo se usan los puntos de control? Primero tenéis que ponerlos en el gráfico y, para eso, necesitaréis un programa que os permita poner puntos de control. Podéis usar cualquier editor gráfico para hacer los gráficos y luego coger otro para poner los puntos de control. Si trabajáis a 8 bits podéis usar el editor que trae el propio DIV. Si no también podéis echar mano del Firebird que, aunque no permite retocar las imágenes, sí permite definir, mover y borrar puntos de control. Obviamente, el IDE oficial de Fenix tendrá opciones para trabajar con puntos de control y a día de hoy creo que ya existen funciones para poder trastear con ellos desde Fenix.

Bueno, pues ya habéis definido los puntos de control y le habéis asignado el gráfico a algún proceso. Ahora hay dos funciones que entran en juego:
     INT get_point(INT librería, INT gráfico, INT número, INT POINTER x, INT POINTER y);
     INT get_real_point(INT número, INT POINTER x, INT POINTER y);

Vayamos con la primera de las dos funciones: get_point. A esta función hay que pasarle la librería donde está el gráfico, qué gráfico dentro de esa librería, el número de punto de control y dos punteros a variables donde se almacenarán las coordenadas del punto de control. Aquí hay hacer una pequeña matización: esas coordenadas se darán referidas a la ESQUINA SUPERIOR IZQUIERDA DEL GRÁFICO. Esto hay que tenerlo en cuenta a la hora de trabajar con esas coordenadas. Por lo tanto, si hacemos un sencillo cálculo y las referimos al centro del gráfico en cuestión ya tenemos las coordenadas reales de ese punto de control.

La otra opción es usar get_real_point. Hay que pasarle el número de punto de control y dos punteros a variables donde se almacenarán las coordenadas del punto de control. Esta vez serán directamente las coordenadas reales del punto de control referidas a la pantalla, teniendo en cuenta el ángulo del gráfico y sus coordenadas.

En ambos casos la función devolverá -1 y no modificará las variables si el punto de control no está definido. Por lo tanto, si queréis saber si un punto de control ya existe o no es suficiente con ver cuál es el retorno de la función.

Para intentar dejar las cosas un poco más claras he escrito un pequeño programa para mostrar cómo usar los puntos de control y su utilidad. En realidad se trata de un fragmento del código del juego en el que estoy trabajando, Space Transport. Si queréis saber algo más visitad la web de Emerald Works. Bueno, a lo que iba. Se muestran en pantalla dos naves espaciales de distinto tamaño y con distinto número de propulsores. Mediante los cursores y las teclas control y shift se activan unos propulsores u otros. Para que las cosas se vean más claras he quitado la parte de movimiento de las naves, por lo que permanecerán estáticas. Pero lo importante es que el código es exactamente el mismo para las dos naves (es más, se llama al mismo proceso dos veces). Pero tal y como están definidos los puntos de control los propulsores se encienden en su sitio. También he aprovechado los conceptos de Manejo de varios personajes con ratón para activar los propulsores.

Bueno, pues si tenéis cualquier pregunta escribidme un mail a lordwakroo@yahoo.es. Un saludo y que la Fuerza os acompañe.