Febrero 02, 2015, 12:26:44 PM Ultima modificación: Febrero 04, 2015, 04:17:31 PM por zorge
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

#4 Febrero 02, 2015, 09:42:28 PM Ultima modificación: Febrero 02, 2015, 10:10:35 PM por penumbra
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???

#6 Febrero 03, 2015, 02:38:42 AM Ultima modificación: Febrero 03, 2015, 02:46:06 AM por penumbra
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
}
evento step
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;
evento left pressed
arrastre = true
evento left release
arrastre = false

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.

#14 Febrero 04, 2015, 08:00:43 AM Ultima modificación: Febrero 04, 2015, 08:08:32 AM por zorge
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