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.

Mensajes - Black_Cat

331
Hola amigo
Lo que sucede es que los objetos hijos, que tienen como parent al "obj_baldosa" tienen su propio evento create, en el cual se le define un color. Al tener un evento create, y el objeto padre definir la variable "Parpadeo" en el evento create, ocurre que los eventos de los hijos tengan conflicto.

Para ello luego de cada "obj_baldosa.color_baldosa = 0" de cada objeto hijo, debes llamar al evento create del parent, con la siguiente funcion:

event_inherited();

Espero te ayude
332
Juegos en desarrollo / Re:Horda Zombie Demo 1.0
Noviembre 18, 2013, 09:46:19 PM
Está bastante bueno, por sobre todo porque son gráficos originales, por asi decirlo.

Una sugerencia, sería ponerle una animación donde se vea que los zombis salgan del suelo. Porque sino aparecen de repente por ahí XD
333
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]

334
Es decir, utilizar score?
Pues, si, también se puede usar tranquilamente XD
335
Ah...
Bueno eso creo que es más fácil, lo único que tenés que hacer es sumar dependiendo del boton que se pulse.
Por ejemplo, en el evento de Mouse_left_pressed le sumas a una (por ejemplo) variable global.puntuacionTotal +=1
y si es otro objeto, es decir, otro boton, sumarías otra cantidad, por ejemplo, global.puntuacionTotal += 2 y así con la cantidad de botones que quieras hacer.
336
Eso se puede hacer de muchas formas, la que se me ocurre es pedir un entero, almacenarlo en una variable y comparar, ya sea con varios if's o lo más conveniente, creo, un switch, de la siguiente forma:

[gml]
var respuesta;
respuesta = get_integer("Ingrese una opcion", "");

switch(respuesta)
{
case 1: //Si el numero de respuesta es 1
           total_puntos +=1; // sumar 1 puntos
break;

case 2: //Si la respuesta es 2
           total_puntos +=2; //sumar 2 puntos
break;
}

[/gml]

Esta solución que te expongo es bastante rustica, ahora si querés dejarlo presentable con botones y un buen diseño, vas a tener que trabajarlo un poco más.

Pero te dejo una idea básica de cómo podés hacerlo :D
337
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.
338
Hola amigo
Lo que se me ocurre que puedes utilizar es la funcion "collision_line", y tiras la linea desde el enemigo, hasta tu personaje.
Si no hay colisión de ningún tipo, es decir, no hay pared entre el Jugador y el enemigo, entonces realizar las acciones.

339
Juegos en desarrollo / Re:The underworld - 2013
Octubre 27, 2013, 05:34:21 AM
De hecho bajé precisamente la versión de Yoyo.
En fin, voy a jugarlo un rato más a ver si puedo pasar más allá XD
340
Podrías verificar en el evento de las teclas, que solo pueda mover si "hurt" es falso.

Por ej.:
if (!hurt)
x+= 4;
341
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]
342
Ah, ahora funciona. Esta mañana había implementado algo así pero solo en el evento create, ahora que lo aplico al evento step me funciona correctamente!  :)

Gracias de nuevo
343
Ahh buena pregunta, en todo caso deberías cambiarlo un poquito ya dependiendo donde se esté evaluando.
Por ejemplo este código correspondería para el objeto player en colision con el objeto enemigo:

[gml]
if (x < other.x)
   hspeed = -4;
[/gml]

Lo que sucede ahí es que la palabra other ahora está remplazando el nombre del enemigo con el que esta colisionando actualmente el jugador.
Así no tendría problemas con varias instancias de objetos enemigo.

entiendes?
344
Hola amigo, para lograr patrones así debes asignarles una velocidad y una dirección al disparo. Y Claro, dependiendo de cómo quieres que salga le colocas una dirección variable o una constante.

por ejemplo si haces que la dirección se aumente por cada step, y le asignas una velocidad dará el efecto de remolino:

speed = 1;
direction += 10;

Ahora para crear muchos disparos usaría una alarma.


345
Todavía me sigue aceptando las conexiones, por más que corte antes del tcpaccept();

Citar

if (partida_creada)
{
    var conexion_entrante ,espacio_libre;
   
    if (cont >= global.tam) // si contador es mayor al tamaño maximo no permitimos conectar
        exit;
   
    conexion_entrante = tcpaccept(sock_coord, 1);   //se escuchan las conexiones entrantes
         
    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;//en el espacio obtenido asignamos el socket que se conectó
          cont += 1;
       }
    }
}


Aun no puedo dar con el problema :-[