Wenasss ootra vez xD
Estoy haciendo unos scripts para hacer swipe que en teoría lo tenía bien, y no sé si falla el script u otra cosa en el juego que ando usándolo... para el que no sepa, swipe es cuando pulsas la pantalla con el dedo y lo arrastras a una direción (deslizar dedo :B)
Voy a poner todo lo que tengo primero y luego digo qué pasa..
script "swipe_create" para inicializar variables que uso:
[gml]globalvar swpdist;
globalvar swpxswipe;
globalvar swpyswipe;
globalvar swpdir;
globalvar swpswiping;
swpdist = argument0;
swpxswipe = 0;
swpyswipe = 0;
swpdir = 0;
swpswiping = false;[/gml]
script swipe_step:
[gml]
if mouse_check_button_pressed(mb_left) { //si pulsamos
swpswiping = true; //se activa el swipe
swpxswipe = mouse_x;
swpyswipe = mouse_y; //y se guardan las coordenadas iniciales para previamente comparar la distancia
}
if mouse_check_button_released(mb_left) { //si dejamos de pulsar (para el caso de que pulsemos sin mover el dedo)
swpswiping = false; //se desactiva el swipe
swpdir = 0; //se resetea la dirección del swipe
}
if swpswiping == true { //si el swipe está activado
direction = point_direction(swpxswipe,swpyswipe,mouse_x,mouse_y); //se va asignando la dirección a la que va el dedo a partir de las coordenadas de inicio y las coordenadas donde se situa el dedo en el preciso momento
if (direction >= 315 and direction < 360) or (direction > 0 and direction < 45) swpdir = 4; //dirección = derecha
if direction >= 45 and direction < 135 swpdir = 1; //dirección = arriba
if direction >= 135 and direction < 225 swpdir = 3; //dirección = izquierda
if direction >= 225 and direction < 315 swpdir = 2; //dirección = abajo
if point_distance(swpxswipe,swpyswipe,mouse_x,mouse_y) > swpdist { //si la distancia entre las coordenadas de inicio y las coordenadas del dedo actuales es mayor a la distancia límite
swpswiping = false; //se desactiva el swipe
return swpdir; //retorna la dirección (1=arriba;2=abajo;3=izquierda;4=derecha)
}
}
else //si el swipe no está activado
return 0; //retorna 0 como dirección, que equivale a nada, así que nada hará[/gml]
entonces, tengo un objeto el cual llamaré a estos scripts para darle un movimiento de deslizado, el objeto es un cubo de hielo, así que pueden imaginarse un poco...
create:
[gml]swipe_create(32);[/gml]
step:
[gml]///swipe
op = 0;
if speed == 0
op = swipe_step();
switch op {
case 1:
if place_free(x,y-1)
vspeed = -8;
break;
case 2:
if place_free(x,y+1)
vspeed = 8;
break;
case 3:
if place_free(x-1,y)
hspeed = -8;
break;
case 4:
if place_free(x+1,y)
hspeed = 8;
break;
}[/gml]
[gml]///collisions
if vspeed < 0 {
if !place_free(x,y-1)
vspeed = 0;
}
if vspeed > 0 {
if !place_free(x,y+1)
vspeed = 0;
}
if hspeed < 0 {
if !place_free(x-1,y)
hspeed = 0;
}
if hspeed > 0 {
if !place_free(x+1,y)
hspeed = 0;
}[/gml]
en ese último código es donde creo, yace el problema, cabe destacar que así se ha quedado después de varias ediciones, así que quizás antes lo tenía mejor que ahora xD
El problema es que, hago un swipe jugando, para la derecha por ejemplo y ok, va a la derecha, colisiona con la pared y se queda quieto, ok... pero qué pasa? ya no puedo hacer más movimientos y no entiendo por qué... incluso he puesto un show_message(swpdir) para testear JUSTO antes del return swpdir; y me sale el mensaje, con la dirección que toca, pero o no me retorna, o el objeto se pasa el retorno por los huev... xD
Este es un ejemplo de swipes que hice hace tiempo, se parece un poco al tuyo, tal vez te ayude
http://www.comunidadgm.org/preguntas-y-respuestas/1-2-3-dedos-funciones-diferentes/ (http://www.comunidadgm.org/preguntas-y-respuestas/1-2-3-dedos-funciones-diferentes/)
Más tarde me leeré tu programa, a ver si encuentro el error.
respondo lo mismo que ha respondido Niu en su tema con su script... no busco un swipe, estoy creando el mio xDDD