hola buenas tardes o noches,tengo un pequeño problema y mas que nada una duda... quisiera saber como resolver la siguiente problematica..
tengo por ejemplo:
"una bala"
"un jugador"
quiero que al momento que el enemigo dispare y la bala colisione con el player saber de que lado colisiono..digamos saber si la bala vino de lado derecho o del izquierdo, de arriba o de abajo.. y en base a esa informacion que mande un mensaje diciendo de que parte vino la bala..
intente hacerlo mediante las cordenas X y Y digamos if collision_circle(x+10,y+10,15,obj_player,false,true) pero no me funciono.. alguna pista o indicio?

Intenta usar una función que devuelve la identificación de instancia (la que tienes está bien xD). Y cuando se detecte la colisión, comproeba la dirección entre las instancias usando point_direction().
alaberga regué el café.

BA:STFW&RTFM

Cita de: NiuWeb en Mayo 13, 2016, 03:34:07 AM
Intenta usar una función que devuelve la identificación de instancia (la que tienes está bien xD). Y cuando se detecte la colisión, comproeba la dirección entre las instancias usando point_direction().
Mejorando esta respuesta, normalmente yo para este tipo de cosas, utilizo la variable Master (Nombre lindo y va al caso)

El enemigo al momento de crear la Bala, tendria algo asi:
a.instance_create(x,y,Bala) a.Master=id

Alli le dara a la Bala la variable Master equivalente a la ID de quien la disparo, ahora, que haremos con eso? Ver de donde vino la Bala :3

En la colision de el Player contra la Bala
impacto=0

direcciondeimpacto=point_direction(x,y,other.Master.x,other.Master.y)
if direcciondeimpacto>=0 and direcciondeimpacto<=45 impacto=0
if direcciondeimpacto>=45 and direcciondeimpacto<=135 impacto=1
if direcciondeimpacto>=135 and direcciondeimpacto<=225 impacto=2
if direcciondeimpacto>=225 and direcciondeimpacto<=315 impacto=3
if direcciondeimpacto>=315 and direcciondeimpacto<=360 impacto=0


Alli vera donde esta situado quien disparo la Bala y te dara los valores para saber en que direccion te dispararon:
impacto=0 Derecha
impacto=1 Arriba
impacto=2 Izquierda
impacto=3 Abajo

Espero que te sirva :3

buenas gracias por responder a los dos  :), TLT96 en cuanto al script esta linea a.instance_create(x,y,Bala) a.Master=id me da un error o yo estoy mal..tendria que agregarle algo mas? me da error la "a.inst.." supongo que a es una variable?

Cita de: eduardoxx1 en Mayo 13, 2016, 04:57:26 PM
buenas gracias por responder a los dos  :), TLT96 en cuanto al script esta linea a.instance_create(x,y,Bala) a.Master=id me da un error o yo estoy mal..tendria que agregarle algo mas? me da error la "a.inst.." supongo que a es una variable?
En vez de a.instance_create(), el código sería:
[gml]
a = instance_create(x, y, bala)
[/gml]
alaberga regué el café.

BA:STFW&RTFM

de echo asi lo intente , puse este codigo
a = instance_create(x, y, bala)
with(a)
{
i_d = aa
}


donde i_d es la variable del objeto bala
y aa es la variable que guarda el id del objeto que esta disparando...
pero no me funciona me da un error..  at gml_Object_mouse_b_LeftButtonDown_1 (line 7) - i_d = aa

y por otra parte intentando...
a = instance_create(x, y, bala) a.Master=id
me da error la linea de codigo(aparece en rojo)

Probablemente el primer error se deba a que la variable aa está declarada en el objeto que linvoca el with, no en el objeto bala. Intenta cambiar el with por esto:
[gml]
with (a) {
    i_d = other.aa;
}
[/gml]
Y el segundo error, quizás se deba a que estás escribiendo las dos cosas sobre una misma línea, aunque normalmente no debería suceder. Intenta arreglarlo un poco:
[gml]
a = instance_create(x, y, bala);
a.Master = id;
[/gml]
alaberga regué el café.

BA:STFW&RTFM

este es mi codigo //a.instance_create(x,y,bala) a.Master=id

//var a = instance_create(x,y,bala)
var a = instance_create(x, y, bala)
with(a)
{
i_d = other.aa //parte corregida y funcionando
}
//a.instance_create(x,y,bala)
//a.Master=id
   como vera si hice el espaciado de codigo pero me seguia dando error... pero ya quedo poniendole other.aa y anexando el codigo de colision con la bala me detecta perfecto de donde viene la bala :) ahora probare si funciona con varios enemigos disparando a la vez... gracias de nuevo el apoyo colectivo siempre sera mejor que single..

Cita de: eduardoxx1 en Mayo 13, 2016, 06:46:22 PM
este es mi codigo //a.instance_create(x,y,bala) a.Master=id

//var a = instance_create(x,y,bala)
var a = instance_create(x, y, bala)
with(a)
{
i_d = other.aa //parte corregida y funcionando
}
//a.instance_create(x,y,bala)
//a.Master=id
   como vera si hice el espaciado de codigo pero me seguia dando error... pero ya quedo poniendole other.aa y anexando el codigo de colision con la bala me detecta perfecto de donde viene la bala :) ahora probare si funciona con varios enemigos disparando a la vez... gracias de nuevo el apoyo colectivo siempre sera mejor que single..

Bueh, algo tarde, pero vine a comentar que si me equivoque, el primer valor lleva el simbolo de igual "=", para asignar esa instancia a una variable :s

a=instance_create(x, y, bala) a.i_d=id

Tecnicamente alli no habria problemas, no me sale en rojo a mi xD
Si lo hiciste con la colision que mencione supongo que funcionaria con Multiples enemigos, aunque depende, que haras alli? Si guardas esa variable, lo mas probable es que se arruine al recibir el impacto de otro enemigo, lo mas recomendable es crear una instancia cada vez que recibes el daño y alli se hagan los calculos que vayas a hacer :P (Si es solo crear el efecto de sangre saliendo de donde te dispararon, puedes utilizar instance_create le asignas el image_angle y ya :v)

a=instance_create(x, y, bala) a.i_d=id esta parte que me muestras la pense cuando modifique el codigo pero me supose que no funcionaria y por eso la elimine e intente de otro modo..
with(a)
{
i_d = other.aa //parte corregida y funcionando
}

pero supongo que esta funciona de igual manera que la anterior..jeje
lo que intento hacer es que cuando colisione la bala con el jugador se destruya y se cree un efecto escudo que protega al jugador de la parte donde esta colisionando la bala..basicamente me funciona con el codigo pero cuando se mueve el enemigo mientras dispara... entonces el escudo aparece en angulo en el que va el enemigo y no la bala..(la diferencia es pequeña ya que no se nota mucho)
he estado pensando en tomar la id de la bala y no el enemigo.. supongo que vendria siendo lo mismo a=instance_create(x, y, bala) a.i_d=id aqui tomaria la id de la bala creada verdad?

No. Ahí almacenará en la variable i_d de la bala creada la identificación del objeto que la creó. La identificación de la bala recién creada está en la variable a.

Ya entiendo lo que quieres hacer, es más sencillo que todo eso que intentas hacer, y mi primer mensaje es lo que te ayudará :D xDD

Primero, digamos que en evento de colisión del player con la bala:
[gml]
var escudo = instance_create(x, y, escudito);
escudo.image_angle = point_direction(other.x, other.x, x, y);
with other instance_destroy();
[/gml]
Suponiendo que lo que quieres es que el escudo "mire" (o rote) a la bala que acaba de golpear al player.
alaberga regué el café.

BA:STFW&RTFM

#11 Mayo 13, 2016, 08:46:51 PM Ultima modificación: Mayo 13, 2016, 08:56:57 PM por eduardoxx1
jajajajaja  :-\ esto baja mi nivel de gml de inter a noob otra vez...
original
var escudo = instance_create(x, y, escudito);
escudo.image_angle = point_direction(other.x, other.x, x, y);
with other instance_destroy();

editado
var escudo = instance_create(x, y, escudito);
escudo.image_angle = point_direction(x,y,other.x,other.y); // cambiar las posiciones y funciona perfecto
with other instance_destroy();


muchas gracias NiuWeb y TLT96 los dos metodos son para el mismo fin...

aprovechando este mismo tema,espero se pueda ya que va relacionado...
tengo un objeto llamado controlador en el evento create tengo un for
var max;
max = 5
item = 0
itemd = 0
for (i = 0; i < max; i += 1)
    {
    instance_create(x+(i * 70),y+100,block)
    }
 

esto me crea 5 bloques en una fila y funciona bien,pero digamos que quiero dos filas de 5 bloques,es decir:
0 0 0 0 0
0 0 0 0 0 <-----
como podria lograr esto sin usar otro for y sin poner dos instances_create?

Cita de: eduardoxx1 en Mayo 13, 2016, 08:46:51 PM
aprovechando este mismo tema,espero se pueda ya que va relacionado...
No. No se puede ni va relacionado.
alaberga regué el café.

BA:STFW&RTFM