Septiembre 01, 2011, 02:02:20 AM Ultima modificación: Septiembre 01, 2011, 03:44:45 AM por dark_servant
mi pregunta es, se puede hacer que por ejemplo mi objeto principal detecte si 2 objetos diferentes estan colisionando? para asi cambiar de sprite?


Gracias.

(ok, mal formulada la pregunta, como seria el codigo?)

#3 Septiembre 01, 2011, 02:22:46 AM Ultima modificación: Septiembre 01, 2011, 03:15:22 AM por elviskelley
if object.place_meetin(x,y,objotro)

object es uno de los que coliciona contra otro.
claro hay varias formas mas de hacerlo.

Edit: ac? hay un error  por no revisarlo antes de postear.

Explicare mi error
estoy pidiendo al sistema verifique en el "object" si en su variable de place_meeting colision contra objotro. pero es logico que esta variable no se esta usando en el "object" y no hay cual variable verificar.

lo correcto es usar el with()

if obj_enemy.place_meeting(x,y,obj_normal_atk)
{show_message("ok")}

sale un error: variable name expected

de salir bien este objeto revisaria si esos 2 estan en colision?


#5 Septiembre 01, 2011, 02:53:46 AM Ultima modificación: Septiembre 01, 2011, 02:57:25 AM por MaanuRP
Porque aca tenemos un error de sintaxis.

El codigo deberia ser:

[gml]
with Objeto0
{
if place_meeting(x,y,Objeto1)
{
 show_message("Colision")
}
}
[/gml]

Adjunto te dejo un ejemplo:
Si tienes alguna duda sobre el ejemplo, pregunta.

perfecto :D solucionado 100%, te agradeceria sime pudieras ayudar en mi otro tema es no encuentro el error

http://www.comunidadgm.org/index.php?topic=15612.0

Muchisimas Gracias por responder elviskelley  y MaanuRP como siempre respuestas a bien rapidas.

#7 Septiembre 01, 2011, 05:18:31 AM Ultima modificación: Septiembre 01, 2011, 05:27:04 AM por dark_servant
aqui mismo te pregunto ahora para agregar otro objeto ese codigo?

[gml]with (obj_enemy)
{
if place_meeting(x,y,obj_normal_atk) and place_meeting(x,y,obj_magic_b)
{
  global.col = true
}
}
//------------------------------------------------------------------
//esto es otro script(este es lo opuesto del primero)

with (obj_enemy)
{
if !place_meeting(x,y,obj_normal_atk) and place_meeting(x,y,obj_magic_b)
{
  global.col = false
}
}[/gml]

//no se si se use and pero quiero que distinga si es uno u otro.


Lo que hace ese codigo es:

Si "obj_enemy" no esta colisionando con "obj_normal_atk" Y con "obj_magic_b": global.col = false

Y si esta colisionando CON LOS DOS AL MISMO TIEMPO global.col = true.

Si quieres que eso pase cuando colisione con cualquiera de esos dos objetos, debes poner OR en vez de AND.

Y si quieres que sucedan cosas distintas cuando colisione con los distintos objetos no los debes poner asi, debes poner cada colision por separado con sus respectivas funciones.

#9 Septiembre 01, 2011, 03:18:16 PM Ultima modificación: Septiembre 01, 2011, 04:30:34 PM por dark_servant
ahora lo puse asi en el step

[gml]with (obj_enemy)
{
if place_meeting(x,y,obj_normal_atk) or place_meeting(x,y,obj_magic_b)
{
 global.col = true
}
}// hasta aqui si marca el true con cada 1 por separado pero cuando meto el otro se queda en false aunq colisione
------------------------------------------------------------------------
//este lo puse en otro piece of code separado del primero.
with (obj_enemy)
{
if !place_meeting(x,y,obj_normal_atk) or !place_meeting(x,y,obj_magic_b)
{
 global.col = false
}
}//pero ya que meto esto se queda siempre en false aunque colisione con alguno de los 2 objetos.
[/gml]

cree un objeo parent para normal atk y magic b y ahora si funciona n__n! borre " or !place_meeting(x,y,obj_magic_b)" en ambos codigos