Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: mamaffia en Noviembre 01, 2014, 07:38:42 PM

Título: Flecha que se dibuje en la ubicación de cada objeto seleccionado
Publicado por: mamaffia en Noviembre 01, 2014, 07:38:42 PM
Hola amigos, estoy teniendo un problema y no encuentro la solución, voy a tratar de hacerlo simple, tengo varios proyectiles en la room y tengo un sprite de flecha que se dibuja al seleccionar el objeto y se destruye al lanzarlo, mientras ese que se lanzó se mueve quiero lanzar otro objeto y la flecha se crea en una ubicación relativa al primer objeto que está en movimiento, la pregunta es.... cómo hago para que la flecha se dibuje en el objeto que selecciono? el código que estoy usando es muy simple, por las dudas lo pongo:

if (seleccionado=1) && lanzado=0
{
if! instance_exists(objflecha)
{
instance_create(x,y,objflecha)
}


pregunto si existe porque al estar en el evento left mouse se dibujan una encima de otra mientras mantengo pulsado. El código está en el objeto que es lanzado. Saludoss
Título: Re:Flecha que se dibuje en la ubicación de cada objeto seleccionado
Publicado por: kostra en Noviembre 01, 2014, 08:52:19 PM
lo primero de todo, se ponen mil flechas encima de otras seguidas por usar el left mouse... cámbialo por left mouse pressed. así solo checkará un solo click.

Y sobre lo que dices... no entiendo bien lo que dices...

EDITO LO QUE IBA A ESCRIBIR DE EJEMPLO:
No lo he puesto al final porque me he hecho un lio, para empezar.. dimé qué quieres exactamente, por orden porque hay algo que no me ha quedado claro, necesito saber CUANDO se lanza el proyectil, y quien, porque si es que clickas a un enemigo y el player dispara, no tiene mucho senido que la flecha desaparezca al disparar, porque sería instananeo y la flecha simplemente no aparecería... me ayudas a entender lo que necesitas?, puedo ayudarte xd
Título: Re:Flecha que se dibuje en la ubicación de cada objeto seleccionado
Publicado por: mamaffia en Noviembre 01, 2014, 09:12:48 PM
Sí tienes razón, voy a tratar de hacerlo más simple, tengo dos pelotas en una room física que al seleccionarlas les puedo dar cierto impulso, si yo selecciono una y antes de alejar el puntero para indicar el impulso la suelto porque me arrepentí y quiero lanzar la otra, al seleccionar esta segunda pelota la flecha se dibuja relativa a la que habia seleccionado primero, la fuerza en cambio sí se aplica a la nueva pelota. Si destruyo cualquiera de las dos pelotas ahí sí la flecha funciona bien, cuando hay una sola pelota en la room se ubica bien pero si son dos o más objetos siempre queda destinado al primero.
Título: Re:Flecha que se dibuje en la ubicación de cada objeto seleccionado
Publicado por: kostra en Noviembre 01, 2014, 10:00:38 PM
O_O???? vale, ahora sí que me rindo, trato de leer  y releer tu explicación, pero ahora me siento algo retra... porque no me entero de nada :S

sry de verdad T_T
Título: Re:Flecha que se dibuje en la ubicación de cada objeto seleccionado
Publicado por: penumbra en Noviembre 01, 2014, 10:33:35 PM
Cita de: mamaffia en Noviembre 01, 2014, 09:12:48 PM
al seleccionar esta segunda pelota la flecha se dibuja relativa a la que habia seleccionado primero, la fuerza en cambio sí se aplica a la nueva pelota. Si destruyo cualquiera de las dos pelotas ahí sí la flecha funciona bien, cuando hay una sola pelota en la room se ubica bien pero si son dos o más objetos siempre queda destinado al primero.

Si revisas tu código:
if (seleccionado=1) && lanzado=0
{
if! instance_exists(objflecha)
{
instance_create(x,y,objflecha)
}


Te darás cuenta que en ningún momento estás actualizando la posición x/y en donde se debe crear el objeto flecha. Me dirás: "¿cómo que no? estoy usando instance_create(x,y,objflecha) en donde le digo que cree la flecha en la x y la y del objeto pelota en el que estoy haciendo click".

Bueno, pues ahí está el error, Si hay más de una instancia del objeto pelota en la habitación, para game maker, obj_pelota SIEMPRE va a significar LA PRIMERA instancia de ese objeto. Por eso cuando destruyes uno de los dos sí funciona, porque la primer instancia deja de existir y la segunda instancia se convierte en la primera.

¿Qué quiere decir esto? Que cuando hay más de una instancia de un objeto en una habitación, no es posible usar el nombre de ese objeto para hacer referencia a una de sus instancias (a menos que siempre quieras referirte a la primera, lo cual casi nunca será el caso).

Intenta esto (en un objeto controlador, no en la pelota)
[gml]
if (seleccionado=1) && lanzado=0
{
    var cc;
    cc = collision_circle(mouse_x, mouse_y, 20, obj_pelota, true, true)
    if !instance_exists(objflecha) and (cc != noone)
         instance_create(cc.x, cc.y, objflecha)
}[/gml]
Título: Re:Flecha que se dibuje en la ubicación de cada objeto seleccionado
Publicado por: mamaffia en Noviembre 02, 2014, 02:57:53 AM
Kostra gracias igual ya me has ayudado más de una vez. Penumbra el código lo acabo de probar y tiene el mismo efecto que el código que usaba antes, solo se dibuja en la primera pelota y hasta que no se destruye no se dibuja en otra. Igualmente está muy clara tu explicación y ahora me voy a poner a romperme un poco la cabeza a ver si sale, si se te ocurre alguna forma por favor dimelaa. Un abrazo y gracias
Título: Re:Flecha que se dibuje en la ubicación de cada objeto seleccionado
Publicado por: penumbra en Noviembre 02, 2014, 09:25:38 AM
Probablemente estés empleando mal una variable o usando incorrectamente un evento de ratón...

Dejo un ejemplo:
http://www.mediafire.com/download/75cbmfjn7ay861i/seleccion_penumbra.gmz (http://www.mediafire.com/download/75cbmfjn7ay861i/seleccion_penumbra.gmz)

No uso un objeto flecha, uso un sprite flecha que se dibuja al lado de la instancia seleccionada. Sólo se puede seleccionar una pelota a la vez, si se hace click en un espacio vacío, se borra la selección. La selección se hace en el objeto pelota, la deselección y el dibujo del sprite flecha en el controlador
Título: Re:Flecha que se dibuje en la ubicación de cada objeto seleccionado
Publicado por: mamaffia en Noviembre 03, 2014, 03:14:42 PM
Holaa es bastante raro lo que me pasa porque antes usaba draw sprite ext y así se dibujaba la flecha en cada pelota, después como quería agregarle algunos efectos y poner partículas que no supe como implementar con draw sprite (si es que se puede) decidí crear una instancia de un objeto, creo que tendria que mandarte exacto todo para ver donde está el error que por cierto lo sigo teniendo, gracias por el ejemplo!