Una duda que tiene algo de inquitud xD

Started by BlySntK, December 31, 2011, 02:22:40 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

BlySntK

Buenas bennuseros :)

Es simple mi duda, tan simple que no la sé dominar :( Antecedentes resumidos :P :

He querido que, por medio de una captura de distancia con get_dist (incluidos get_distx y get_disty) haga que un personaje cercano a otro que se le aproxima muestre su nombre o no. Pero no termina de salirme. He probado con el algoritmo de detección de "enemigo" cercano pero parece que no lo acabo de entender (y de ahí que no me salga lo que quiero y lo terminé haciendo con map_get_pixel. Que por cierto.., un gran resultado), pero leñe... me trae de cabeza la forma de cómo podría hacerse calculando las distancias de uno a otro...

¿Una ayudita, please? (no hay prisa ^_^)
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

osk

En mi manualillo, en el capítulo de cómo hacer un RPG, hay un apartado que explica cómo se puede hacer...cuando habla de que el personaje se acerca a unos enemigos que le empiezan a seguir si se acerca demasiado. No sé si te puede valer...

Erkosone

Te comento como lo hago yo:


- Para los RPG donde por ejemplo hay enemigos, objetos, letreros etc, y donde quieres que "todos los objetos que pueden mostrar info" reaccionen por proximidad con un único personaje, o varios.. una solución extremadamente simple es la de crear un proceso con ID conocido como por ejemplo ID_PROXIMITY, el gráfico de este proceso será un circulo, seteas el alpha a cero.. y ya lo tienes XD..   todos los objetos/cosas que pueden mostrar un letrero con info simplemente comprueban colisión con ID_PROXIMITY, si hay colisión mostrar cartel, si no.. esconderlo..


Creo que mas simple que esto no se puede, además, si tu personaje tiene modo "sigilo" por ejemplo, aplicas un  ID_PROXIMITY.size=50; y los objetos/enemigos que pueden detectar la presencia de tu personaje necesitarán que estés mas cerca de ellos para detectarte.


Espero te sirva de ayuda  ;)

Erkosone

Se me olvidó decir que este proceso adoptará las coordenadas del personaje durante el juego, de esta forma creas un área de detección circular igual que get_dist() con el rango que desees, quizá consume algo mas de recursos que get_dist() directamente, pero permite mayor flexibilidad a la hora de modificaciones, ya que todo está centralizado en un punto, el tamaño del gráfico de este proceso.

BlySntK

#4
Quote from: Erkosone on December 31, 2011, 05:28:37 PM
Te comento como lo hago yo:


- Para los RPG donde por ejemplo hay enemigos, objetos, letreros etc, y donde quieres que "todos los objetos que pueden mostrar info" reaccionen por proximidad con un único personaje, o varios.. una solución extremadamente simple es la de crear un proceso con ID conocido como por ejemplo ID_PROXIMITY, el gráfico de este proceso será un circulo, seteas el alpha a cero.. y ya lo tienes XD..   todos los objetos/cosas que pueden mostrar un letrero con info simplemente comprueban colisión con ID_PROXIMITY, si hay colisión mostrar cartel, si no.. esconderlo..


Creo que mas simple que esto no se puede, además, si tu personaje tiene modo "sigilo" por ejemplo, aplicas un  ID_PROXIMITY.size=50; y los objetos/enemigos que pueden detectar la presencia de tu personaje necesitarán que estés mas cerca de ellos para detectarte.


Espero te sirva de ayuda  ;)

Creo entenderlo... aunque si es tan simple como lo veo... es para darme de cabezazos contra el teclado como un conocido gif que hay por ahí. Esta noche lo probaré y como resulte, te beso el..... pie xD De todas formas sabía que no debía ser tan difícil, era cuestión de apañarlo de alguna manera.

Muchísimas gracias Erko, te va un karma ;) Ya avisaré si me funciona, que sé que sí si lo sé hacer (espero que así sea).

P.D.: osk, lo siento men, ya probé lo de la proximidad enemigo con get_dist y familia... porque lo tengo en los apuntes, pero... no me aclaro :S Si me lo quieres explicar con un pequeño código aplicándolo a, por ejemplo, lo que expone Erko; un "personaje" que se acerque a un cartel y éste último muestre su información, te lo agradecería, más que nada para entenderlo por si lo necesito en alguna ocasión, siempre es bueno saber más alternativas.
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

BlySntK

Quote from: osk on December 31, 2011, 06:32:30 AM
En mi manualillo, en el capítulo de cómo hacer un RPG, hay un apartado que explica cómo se puede hacer...cuando habla de que el personaje se acerca a unos enemigos que le empiezan a seguir si se acerca demasiado. No sé si te puede valer...

Por cierto, mi enhorawena por el manual, estoy aprendiendo muchísimo con él, siento no haberte felicitado antes...
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

BlySntK

Ah y... feliz año nuevo a todo el que lea este hilo!!! xD
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

FreeYourMind


Fede

Si quieres ser sabio, aprende a interrogar razonablemente, a escuchar con atención, a responder serenamente y a callar cuando no tengas nada que decir.

Futu-block


Erkosone

Bueno, te explico lo de GET_DIST();
Lo primero que tienes que tener claro es que TODOS los procesos que hagan uso de GET_DIST() deben obligatoriamente tener seteado el mismo valor de RESOLUTION, esto es por que la función internamente necesita comparar las coordenadas de dos procesos entre si, y si tienes valores distintos de RESOLUTION el resultado carecerá de sentido.

Dicho esto, imagina que tienes un proceso Personaje, el cual es en todo momento localizable con el típico ID_PERSONAJE, pues sencillamente en todos los objetos/enemigos/carteles donde quieres comprobar la "distancia" con el ID_PERSONAJE tienes que hacer algo así:

if( get_dist( id_personaje ) < 50  ) ... aquí meter el bloque de código que muestra la info o lo que toque en cada caso..  ; END

Simplemente compruebas si el ID_PERSONAJE está a menos de 50 pixels de distancia, si se cumple se ejecuta lo que queiras, no tiene mas misterio, aunque yo estoy acostumbrado a hacerlo del otro modo.

BlySntK

Comprendo... Aunque la mejor manera de saber si lo he comprendido es hacer las consecuentes pruebas... Voy a ir haciendo lo pendiente, y os comento (aunque realmente funciona, soy yo quien debo saber hacerlo). Gracias chicos.

P.D.: Qué malos que sois xD Los reyes magos os van a regalar las cenizas de un volcán en vez del típico carbón, muuhahahahaha!!!
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)

BlySntK

#12
Parece que no lo llego a comprender del todo bien :S Ni con el modo de tener un grafico dinamico circular en un proceso a parte, poniendo las coordenadas bien, el circulo me sigue sin problemas, pero a la hora de la collision, no me collisiona. No sé qué es lo que hago mal.

si pongo por ejempplo:

if(collision(type circulo_perro))
   ...sentencia...
end
//Siendo circulo_perro el proceso directo, porque no se puede hacer lo siguiente, supuestamente:

begin
   id_proximity=get_id(type circulo_perro)
   if(collision(type id_proximity))
      ...
   end
end
//Porque no es un proceso, sino una variable con un identificador de proceso

¿Cómo lo debería hacer?

¿Y otra cosa, el get_dist, qué resolution debería de poner para que me funcione?

edito: Parece que en collision si podía poner la variable con el identificar, tenia que quitar el type, pero aun así, no me collisiona

edito II Bueeeeeno, al parecer lo he solucionado más o menos como quería :) Solo que en vez de un circulo (las primitivas dibujadas con draw el colisionador no me las coge...) he optado por un cuadrado rectangulo transparente que me hace la misma función (y qué comodidad :) buff). La idea de Erko me siguió valiendo. Por el momento con eso me vale, aunque, haciendo las pruebas con get_dist, sigo sin saber cómo gestionar la resolution de los diferentes procesos (2 en este caso) que se tiene que guardar las distancias... Este ya no me supone demasiada urgencia por el momento... pero si alguien me pusiera un breve código con un ejemplo de funcionamiento básico de get_dist, lo agradecería, únicamente para que se mostrara, o no, información de un objeto, por ejemplo.

Gracias :)
Esnucándote contra la pared no sé si conseguiré mucho, mejor lo pruebo y salímos de dudas ^_^
-------------------------------------------------------
Blaisantka Games > (Official developer web site)