Hola a todos,
Hace poco intente resolver el siguiente problema sin obtener ninguna solucion optima,
Tengo dos objetos, obBol y obBlock
Quiero que al tocar obBol el obclock que tenga el mismo valor en la variable num que he creado en su evento este, este objecto obblock se vuelva solido.
En ambos objetos tengo la variable num en CREATE,
Quiero lograr que al tocar el objecto obBol que tenga el mismo valor en la variable num del objecto obBlock el objecto obBlock se vuelva solido..
No se si me hice entender XD XD
Gracias pos su atención,
Puedes hacer algo como esto:
[gml]
//Al presionar el objeto (evento <mouse> o alguna condición)
with (oBlock) { //Revisar todas las instancias de oBlock
if (num == other.num) //Si el 'num' de oBlock es igual al del oBol
solid = true; //Marcar como sólido
}
[/gml]
El player tiene que tocar el boton, en SETP del player tengo lo siguiente:
if place_meeting (x,y,obBol)
{
with (obBlock)
{
if num == obBol.num
est = act;
}
}
el codigo no esta muy simplificado, pero creo que se entiene,
Lo pruebo pero no pasa nada.... :'(
Según lo que dices, el objeto player no tiene una variable num, sino que ésta se encuentra en el objeto Bol con el que se colisiona.
Por eso es que no sucede nada, porque debes obtener el valor de num del objeto con el que colisionó para comprobar correctamente.
[gml]
var obj = collision_rectangle(x, y, x + 32, y + 32, oBol, false, true);
if obj != noone {
with (oBlock) {
if num == obj.num;
est = act;
}
}
[/gml]
Hice uso de un collision_rectangle() en el ejemplo. Revisa esta función en el manual para que entiendas mejor.
Cita de: NiuWeb en Abril 23, 2016, 06:54:13 PM
Según lo que dices, el objeto player no tiene una variable num, sino que ésta se encuentra en el objeto Bol con el que se colisiona.
Por eso es que no sucede nada, porque debes obtener el valor de num del objeto con el que colisionó para comprobar correctamente.
[gml]
var obj = collision_rectangle(x, y, x + 32, y + 32, oBol, false, true);
if obj != noone {
with (oBlock) {
if num == obj.num;
est = act;
}
}
[/gml]
Hice uso de un collision_rectangle() en el ejemplo. Revisa esta función en el manual para que entiendas mejor.
Lo he hecho y no ocurre nada, obBlock es un objeto padre,
¿Tendrá algo que ver?
No creo.
Más importante. ¿Estás seguro de que no ocurre nada? Intenta hacer pruebas, reemplaza est = act por otra cosa como un show_message("¡Colisión!") o algo así
Estaba escribiendo mal el code
:p
Ahora si me reconoce,
Una pregunta ¿Porque place_meeting no me reconoce y collision_rectangle si?
Porque place_meeting() devuelve un booleano (true o false dependiendo de si hay o no colisión), y collision_rectangle() devuelve la id de la instancia que colisiona. Por ello es posible sacar el valor de num de la instancia identificada con la id que la función devuelve.
Muchas gracias NiuWeb me quedo clarisimo. :D