tengo un codigo para si pincho con el mouse en mi obj_pelota este se mueve a donde muevo yo el mouse mientras tenga pulsado el click izq del mouse y cuando lo suelto cae pero seolo lo coge si pincho en el centro si pincho en un borde del obj_pelota no lo coge como podria hacer para que pinche en donde pince del obj_pelota lo coja??
Revisate en las opciones del objeto, precise collision, o algo asi. Mira haber que tienes puesto. Quizas se lo tengas marcado, y por lo tanto solo lo coje cuando tocas el centro, o si lo marcas, entra dentro haber que mascara le tienes puesta, porque puede ser redonda, cuadrada, precisa, etccc.
nada he probado con todas las mascaras con todas las opciones y nada XD
Que evento tienes para coger la pelota?? pon el código y donde lo usas, please
es cuestión de definir una máscara más grande que el sprite y usar el evento MOUSE LEFT del objeto pelota
penumbra pero eso no haria que cambiase la forma actual de colision que tengo??con el suelo con otros objetos etc???
Cita de: zorge en Febrero 03, 2015, 02:22:39 AM
penumbra pero eso no haria que cambiase la forma actual de colision que tengo??con el suelo con otros objetos etc???
Tienes razón. No sé por qué pensé que el objeto que arrastras no tenía interacción con otros objetos. Lo que sucede es que los eventos MOUSE LEFT/RIGH o MOUSE LEFT/RIGHT PRESSED sólo responden si haces click dentro del sprite. Si haces clcik un pixel fuera de los límites del sprite (o de su máscara), los eventos nunca se lanzan y no pasa nada.
Una solución es usar la función collision_circle() en la posición del puntero del raton. Si collision circle detecta colisión con la pelota, ésta se arrastra. La función permite ajustar el radio de colisión, por lo que es posible arrastrar la pelota aun si se hace click fuera del sprite de la pelota.
Otra solución es preguntar a qué distancia está el puntero del ratón del objeto pelota, y si está dentro de una distancia dada, al hacer click, que se pueda arrastrar la pelota. De esta manera no importaría el sprite/máscara del objeto, sólo la distancia que hay del puntero a la paelota
muchas gracias voy a probar con el collision circle a ver que tal se me da XD luego os cuento
Bien, pero usa eventos mouse global, porque si no puede pasar lo mismo, que no se lance el evento si no se está dentro del sprite.
penumbra y como lo tendria que poner en el evento global left?porque lo he puesto ahi y no pasa nada sigue igual
indica qué código estás usando.
es que tengo un pifostio de código que flipas XD soy bastante malo programando pero bueno lo muestro y así me decís los 743 mil fallos que pueda tener jajaja que verguenza,se que tendré mil cosas mal porque voy tomando ayuda de uno de otro y mezclando eso unido a mi falta de experiencia pues hace el código que mostrare ahora.
evento create :
agarre = false
tiempo = 0 // variable para conteo de tiempo
boom = 10 // variable para cuenta atras antes de explosion
image_speed = 0.7
linea = view_wview[0]/2;
if (x < linea){
image_xscale = -1 ;
hspeed = -4
}else {
image_xscale = 1
hspeed = 4
}
tiempo ++ // inicial el tiempo
if place_free(x,y+1){ // si no hay nada debajo nuestra en un pixel la gravedad es 1.2
gravity = 1.2
image_speed = 0
}else {gravity = 0} // si hay algo la gravedad es 0
gravity_direction = 270 // direccion de la gravedad es de 270
if vspeed >= 18 {vspeed = 18} // si la velocidad de caida es igual o mayor a 18 se queda en 18
if tiempo = 30 { // si pasa un segundo se resta uno de la cuenta atras de la bomba
boom -- // y se reinicia el tiempo
tiempo = 0
}
if boom <= 0 {instance_destroy()} // si la cuenta atras llega a cer se destruye
if agarre = true {
x = mouse_x
y = mouse_y
}
///Motor
d = point_distance(x,y,mouse_x,mouse_y);
//Agarrar
if( mouse_check_button_pressed(mb_left) and d <= 16 )
{
agarre = true;
gravity = 0;
//speed = 0;
//xr = mouse_x - x;
//yr = mouse_y - y;
mouse_xprevious = mouse_x;
mouse_yprevious = mouse_y;
}
//Arrastrar
if( agarre )
{
hspeed = mouse_x - mouse_xprevious;
vspeed = mouse_y - mouse_yprevious;
//x = mouse_x - xr;
//y = mouse_y - yr;
//direction = point_direction( xprevious,yprevious, x,y );
}
///Lanzar
if( agarre and (mouse_check_button_released(mb_left) or d > 16) )
{
agarre = false;
gravity = 0.2;
//speed = point_distance( xprevious,yprevious, x,y );
}
//Previo
mouse_xprevious = mouse_x;
mouse_yprevious = mouse_y;
creo que ahí esta todo lo necesario no??he de decir que clamud me ayudo en este codigo :)
Parece que sí, pero no veo que estés usando collision_circle en ningún lado.
¿Has probado a modificar esto?
[gml]if( mouse_check_button_pressed(mb_left) and d <= 16 )[/gml]
Por ejemplo, en lugar de 16, poner 50 (o un valor mayor). A mi me parece que con eso ya podrías arrastrar el objeto aunque no pinches exactamente dentro de su sprite.
si tambien lo probe y nada :( creo que llegue a poner hasta 100...........lo que hace es que cuando picho fuera del sprite se para pero no me deja ni cogerlo ni arrastrarlo a no ser que pinche en el centro
¿No puedes colocar el proyecto para verlo más a fondo? aunque sea una versión con sprites simples/alternativos
hola penumbra aqui te dejo un archivo del proyecto si quieres el original para revisarlo mejor o verlo dimelo ok aqui se ve el fallo que digo no es posible agarrarlo bien solo si lo coges desde el medio si lo coges desde otro lado se para gracias de antemano a todos los que me intentais ayudar se agradece mucho.
Este es el causante del error
[gml]///Lanzar
if( agarre and (mouse_check_button_released(mb_left) or d > 16) )[/gml]
Esta condición no está bien formulada, hace que en cada paso (incluso en el paso donde se acaba de presionar el botón del mouse), si la distancia es mayor a 16, se suelte la bomba, por eso no es posible arrastrarla si el puntero está a más de 16 pixeles del origen. Puedes borrar la última parte de la condición o o cambiar de 16 a un número mayor.
muchisimas gracias penumbra efectivamente era eso aunque desgraciadamente sigue teniendo comportamientos raros como cuando lo cojo y presiono contra el suelo desaparece el obj de golpe y bueno cuando lo probe en android no suelta bien no se porque :( igualmente muchisimas gracias por tu ayuda eres todo un maestro