Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Temas - Black_Cat

21
Hola que tal, hoy decidí volver a programar en GM y de paso que tenía por ahi mi  :GMS:  con polvo... se me atravesó un problema y es que mi juego se traba,( peta, se tilda, deja de andar) cuando lanzo muchas burbujas.  :(
En un principio pensé que eran los sonidos, pero luego comenté las acciones para no reproducir sonidos, y aún así se traba mi juego.

La verdad no sé donde podría estar el error, lo miré varias veces hoy y no encuentro nada.
Paso a dejar los eventos de mi objeto Burbuja:

Create
image_speed = 0.3;
alarm[0] = 30;


alarm 0

vspeed = -5;
hspeed = 0;


colision con pared3232

if (hspeed != 0)
{
    hspeed = 0;
    alarm[0] = 1;
}

if (vspeed != 0)
{
    vspeed = 0;
   
    image_index = 0;
    sprite_index = spr_burbujaExplota;
   
    //audio_play_sound(s_explotaBurbuja,1,false);
}



Outside Room


instance_destroy();


Animation End

if (sprite_index == spr_burbujaExplota)
    instance_destroy();




22
Mi problema es el siguiente, estoy haciendo un juego online. Funciona bastante simple: el servidor crea una partida y una lista donde almacenará los jugadores que vayan conectandose. El problema es ese, que no se actualiza, si bien, los carteles indican que el servidor fue creado correctamente y los clientes se conectan, igualmente, de forma correcta, no se visualizan los cambios en la lista, es decir, no se agregan los jugadores que van conectandose.

El programa es bastante sencillo, lo adjunto para ver si pueden ayudarme.  :(
23
Hola amigos makeros, tengo un inconveniente con mi juego.
Tengo un personaje que se mueve en una plataforma, haciendo de patineta. El caso es que cuando esta patineta colisiona con un objeto, en este caso es una manzana como item, se queda trabado. Incluso a veces no lo hace pero se queda quieto unos cuantos pixeles haciendo que se descuadre el personaje y la patineta.

El código que uso para que mi personaje quede encima de la patineta es el usual para los juego de plataforma...

Tengo estos códigos:

Player -> colision patineta:
[GML]
vspeed = 0;
move_contact_solid(270,12);
[/GML]

Player->Step
[GML]
if (place_free(x,y+1))
    gravity = 0.6;
else
    gravity = 0;
   
   
if (place_meeting(x,y+35,tabla_skate))
{
    if (saltar) && (vspeed > 0)
        sprite_index = spr_player;
}
else
{
    if (saltar)
        sprite_index = spr_player_salta;
}

if (keyboard_check(vk_left))
{
    repeat(velocidad)
    {
        if (x > 0)
        {
            x -= 1;
            tabla_skate.x -= 1;   
        }
    }
}

if (keyboard_check(vk_right))
{
    repeat(velocidad)
    {
        if (x < room_width)
        {
            x += 1;
            tabla_skate.x += 1;   
        }
    }
}

if (keyboard_check(vk_up))
{
    repeat(velocidad)
    {
        if (y > 195)
        {
            y -= 1;
            tabla_skate.y -= 1;
        }
    }
}

if (keyboard_check(vk_down))
{
    repeat(velocidad)
    {
        if (y < 390)
        {
            y += 1;
            tabla_skate.y += 1;
        }
    }
}
[/GML]

Tabla -> colision con item manzana
[GML]
score +=100;
with(other) instance_destroy();
[/GML]

Destaco que la tabla es solida, como antes mencionaba, es una plataforma dentro de todo. Y el item de manzana es no-solido.

espero me puedan ayudar :D
24
Preguntas y respuestas / Sonido no se reproduce
Enero 30, 2014, 04:42:06 AM
Hola a todos de nuevo. Tengo un problema y es que cuando cargo un sonido en el :GMS: puedo darle play en el recuadro de carga del recurso y suena.  Pero en mi juego no lo hace cuando hago sound_play(sound0);

Alguna forma de solucionarlo o de porqué no funciona? :-\
25
Dejo un gráfico explicativo (perdón por mi mal dibujo, espero que se entienda) :-[

Quisiera saber cómo podría hacer para que mi personaje sea empujado por el movimiento de mi engranaje, el cual gira en dirección antihorario (u horario). En el gráfico gira antihoriario, vease la flecha roja grande.
¿Es posible hacer que mientras se va moviendo el engranaje, este vaya empujando a mi personaje, estando allí parado solamente?

Espero puedan ayudarme :)
26
Preguntas y respuestas / cuadrar animación de colision
Noviembre 17, 2013, 01:20:49 AM
Hola, tengo un problema, y es al intentar que mi sprite de disparo cuadre cuando choque con un bloque, o una pared.
En la imagen adjunta, en la situación uno, por ejemplo, se genera antes de la pared y queda un hueco vacío.
En la situación dos queda casi pegado y en la situación 3 se sobrepasa un poco a la pared.

Mi pregunta es cómo puedo yo solucionarlo.
La animación se genera, cuando mi disparo choca contra la pared, entonces cambio el sprite:

[GML]
sprite_index = spr_disp_pistola_pl_choca;
speed = 0;
image_speed = 0.3; 
[/GML]

27
Buenas a todos!

Tengo un problema, y es que mis sprites no se corresponden cuando cambio a un sprite de disparo.
Por ejemplo cuando mi personaje esta corriendo y presiono la tecla para disparar, el sprite cambia, pero inicia siempre en la subimagen 0, entonces esto genera un salto feo en la animacion

Mi codigo en el step es:
[GML]
if (keyboard_check(vk_right)) || (keyboard_check(vk_left))
{
    if (!place_free(x,y+1))
        if (!dispara)
            sprite_index = spr_pl_corre;
        else
            sprite_index = spr_pl_corre_disp;

}
[/GML]

Alguna idea para arreglarlo?

EDIT: finalmente lo solucioné eliminando algunos objetos, que por alguna razón entraban en conflicto.
28
Vengo de nuevo con otro problema.

Para que entiendan el código de antemano, lo que hace es que cuando el servidor valida una conexión, le pasa 1 dato al  cliente. que es el lugar libre, en otras palabras sería como el numero de jugador.
Ahora cuando nuestro cliente se desconecta vuelve a pasar ese numero de jugador al servidor, para que este (el servidor) coloque dicho lugar en estado vacío.
Mi problema es que dicho espacio nunca se limpia y no sé donde está el problema, lo revisé y lo testee bastante rato ya, por eso acudo a ustedes :'(

-El objeto "boton_iniciaServer" es el que acepta las conexiones.
-Para cada conexión de un cliente creo una instancia de Receptor Cliente para que pueda este manejar los datos de cada cliente real


Mis codigos:

boton_iniciaServer, (evento step) aqui es donde se reciben las conexiones y se pasa los datos
[gml]
if (partida_creada)
{
    var conexion_entrante ,espacio_libre;
   
    conexion_entrante = tcpaccept(sock_coord, 1);   //se escuchan las conexiones entrantes
         
    if (cont >= global.tam) // si el tamaño es mayorIgual al maximo de jugadores permitidos
    {
        scr_desconectarCliente("No queda espacio en la sala.",conexion_entrante);
        exit;
    }

   
    if (conexion_entrante >= 0)   //si hay una conexion entrante
    {
        espacio_libre = scr_obtieneEspacioLibre(); // obtenemos un lugar
       
        if (espacio_libre != -1) // si hay lugar
        {
            cont += 1;   
            inst = instance_create(0,0,representante_cliente);//Este objeto representara a un cliente conectado
            //Esto quiere decir que cada inst, sabra su numero de jugador y de que socket vienen
            inst.numero_jugador = espacio_libre;
            inst.socket_cliente = conexion_entrante;
           
            list_jugadores[espacio_libre] = inst;//en el espacio obtenido asignamos la instancia
           
            clearbuffer();
            writebyte(const_conexionRealizada);
            writebyte(espacio_libre);
            sendmessage(conexion_entrante);
            exit;
        }
    }
}
[/gml]


Receptor de cliente, en el server (evento step);
[gml]
while(1)
{
    msg = receivemessage(socket_cliente);
    if (msg < 0) break;
   
    if (msg == 0)
    {
       instance_destroy();
       break;
    }
   
    byte = readbyte();
   
    switch(byte)
    {
        case const_desconectar: // un cliente se sale de la partida, esto es una constante que equivale a 1
           
            pos = readbyte(); // leemos el numero de jugador que nos pasa el Cliente real cuando cierra su ventana
            boton_iniciaServer.list_jugadores[pos] = 0; //ponemos en disponible el lugar
            boton_iniciaServer.cont -= 1; //descontamos un jugador
             
            instance_destroy();
        break;     
    }   
}
[/gml]

Cliente real, (evento step)
[gml]
while(1)
{
    msg = receivemessage(global.sock_servidor);

    if (msg < 0) break;
   
    if (msg == 0)
    {
        show_message("Desconexion repentina");
        instance_destroy();
        game_end();
        break;
    }
   
    byte = readbyte();
    switch(byte)
    {
        case const_desconectar:
            mensaje = readstring();
            show_message("Causa de la desconexion:#-" + string(mensaje));
            game_end();
        break;
       
        case const_conexionRealizada: // esto es una constante que equivale a 2
            numero_jugador = readbyte(); //obtenemos el numero de jugador que nos pasa el Server al conectarnos
            nick = get_string("Escribe un nombre para tu jugador", "jugador_"+string(irandom(60)));
           
             
        break;
    }

}
[/gml]

Cliente real, (evento Game end)
[gml]
clearbuffer();
writebyte(const_desconectar); // esto es una constante que equivale a 1
writebyte(numero_jugador); //enviamos nuestro numero de jugador
sendmessage(global.sock_servidor); // al servidor
[/gml]




EDIT: Quiero decir que ya lo solucioné, de la siguiente forma:

[gml]
while(1)
{
    msg = receivemessage(socket_cliente);
    if (msg < 0) break;
   
    if (msg == 0)
    {
       // SOLUCION ///////////////////////////
            pos = readbyte(); // leemos el numero de jugador que nos pasa el Cliente real cuando cierra su ventana
            boton_iniciaServer.list_jugadores[pos] = 0; //ponemos en disponible el lugar
            boton_iniciaServer.cont -= 1; //descontamos un jugador

       instance_destroy();
       break;
    }
   
    byte = readbyte();
   
    switch(byte)
    {
        case const_desconectar: // un cliente se sale de la partida, esto es una constante que equivale a 1
           
            pos = readbyte(); // leemos el numero de jugador que nos pasa el Cliente real cuando cierra su ventana
            boton_iniciaServer.list_jugadores[pos] = 0; //ponemos en disponible el lugar
            boton_iniciaServer.cont -= 1; //descontamos un jugador
             
            instance_destroy();
        break;     
    }   
}
[/gml]
29
Hola que tal, estoy haciendo un juego LAN con la 39dll y me surge el problema de que los clientes, siguen conectándose al servidor aún cuando especifiqué que la cantidad máxima de conexiones sea una dada. Es decir que tengo una conexion máxima para 2, pero aún así siguen conectándose más cliente.

Mis códigos son:
SERVIDOR:
left mouse pressed
[GML]
if (!partida_creada)        //mientras no se haya creado una partida
{
    sock_coord = tcplisten(14808,global.tam, 2);  //abrimos un socket (creamos una partida)
    partida_creada = 1;                 //establecemos el indicador en 1 de que ya se a creado una partida
}
[/GML]

step
[GML]
if (partida_creada)
{
    var conexion_entrante, espacio_libre;
   
    conexion_entrante = tcpaccept(sock_coord, 1);
   
    if (conexion_entrante > 0)    //si hay una conexion entrante
    {
        espacio_libre = scr_obtieneEspacioLibre(); // obtenemos un lugar
       
        if (espacio_libre != -1) // si hay lugar
        {
            list_jugadores[espacio_libre] = conexion_entrante;   
            cont += 1;
        }
        //en el espacio obtenido asignamos el socket que se conectó
       
    }
}
[/GML]

CLIENTE:
evento Create
[GML]
var ip, conexion ;
conectado = 0;
ip = get_string("Ingrese IP a conectarse. ","");

conexion = tcpconnect(ip, 14808, 1);

if (conexion)
{
    global.sock_servidor = conexion;
    conectado = 1;
}
else
{
    show_message("ERROR");
    game_end();   
}
[/GML]