Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: kostra en Enero 11, 2016, 04:56:11 PM

Título: Creando un swipe que solo me funca una vez
Publicado por: kostra en Enero 11, 2016, 04:56:11 PM
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
Título: Re:Creando un swipe que solo me funca una vez
Publicado por: Clamud en Enero 12, 2016, 01:09:29 AM
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.
Título: Re:Creando un swipe que solo me funca una vez
Publicado por: kostra en Enero 12, 2016, 01:12:20 AM
respondo lo mismo que ha respondido Niu en su tema con su script... no busco un swipe, estoy creando el mio xDDD