Septiembre 06, 2015, 04:18:36 AM Ultima modificación: Septiembre 06, 2015, 05:38:22 PM por saruman

(el problema que que coloque "sign" donde no debia   :-[ )
hola, hace poco he tenido un problema con un enemigo y la función "random"
el movimiento del enemigo debería ser algo haci: random(6), o sea debería variar
pero por algún problema de calculo en el código el enemigo siempre se mueve a la misma velocidad
si alguien me ayudara estaría muy agradesido

aqui el codigo del enemigo

create event
[spoiler]
h = 15;
i = 2;

grav = 0.2;
hsp = 0;
vsp = 0;
jumpspeed = 7;
spd = random(6);
nspeed = choose(2,-2);
dir = 0;
move = 0;
jump = 0;

alarm
  • = 5+random(20)[/spoiler]


    step event
    [spoiler]///IA
    //saber donde esta el player
    if distance_to_object(obj_player) > 270 && place_meeting(x,y+1,obj_block){
        move = 0;
        dir = 0;
    }
    if distance_to_object(obj_player) < 200 {
        move = 1;
        if obj_player.x != x {
            if obj_player.x > x { dir = 1 };
            if obj_player.x < x { dir = -1 };
        }else{
            dir = 0;
        }
    }
    if distance_to_object(obj_player) < 32 {
        dir = 0;
    }

    if (place_meeting(x,y+1,obj_block))
    {
        vsp = jump * -jumpspeed;
    }

    if (vsp < 10) { vsp += grav;}

    hsp = obj_player.movespeed * dir

    //movimiento 1
    if move = 0 {
        if !place_meeting(x+nspeed,y,obj_block){
            x += nspeed
        }
        if place_meeting(x,y+1,obj_block) && (place_meeting(x+nspeed,y,obj_block) or (!place_meeting(x+nspeed-16,y+16,obj_block)) or (!place_meeting(x+nspeed+16,y+16,obj_block))) {
            nspeed *= -1
        }
    }
    //movimiento 2

    if move = 1 {
        if !place_meeting(x+sign(hsp),y,obj_block){
                x += sign(hsp);
            }
        hsp = 0;   
    }

    //gravedad

    if (place_meeting(x,y+vsp,obj_block))
    {
        while(!place_meeting(x,y+sign(vsp),obj_block))
        {
            y += sign(vsp);
        }
        vsp = 0;
    }
    y += vsp;
    [/spoiler]

spd =choose(2,4,6,8);  ponga este codigo a ver que pasa .
Suerte .

En el evento Create poné "randomize();" y siempre que inicies tu juego va a elegir valores diferentes.

gracias pero no me fusiona
el problema en realidad pareciese ser que no importa que valor coloque en spd, siempre dará 1 :(

#4 Septiembre 06, 2015, 05:05:10 PM Ultima modificación: Septiembre 06, 2015, 05:08:19 PM por Guacusio
Cita de: saruman en Septiembre 06, 2015, 04:51:24 PM
gracias pero no me fusiona
el problema en realidad pareciese ser que no importa que valor coloque en spd, siempre dará 1 :(

Si la única parte donde le das valor a la variable spd es en el evento create cuando haces spd=random(6), entonces lo único que podría provocar que la función entregue siempre el mismo valor es que la semilla de números aleatorios sea siempre la misma, tal como dijo Iros. Para comprobar que la función random te está entregando números distintos, coloca randomize() en el evento create al principio del código, y en la línea siguiente a la que haces spd=random(6) evalúa su valor mediante show_message("spd="+string(spd)). Si aún así el mensaje te indica que spd tiene siempre el mismo valor, debieras contactar a Yoyo para informarles de este bug.

En el caso de que exista otra causa ajena al uso de la función random, prueba reemplazando la línea de código donde defines spd por otra como, por ejemplo, spd=3. Si ves que spd en el juego sigue tomando el valor 1 entonces el problema está en tu código y estás dándole un valor a spd en otra parte.