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 - Naitsabes0

61
Cita de: brunoxzx en Diciembre 16, 2017, 11:32:20 PM
Upsi xP en el código del "event user 0" una parte dice esto "color==color" y eso es algo redundante, debería decir "color==ins.color".

¡Listo ahora sí se da por resuelto! (También puedes culpar a dios por esto y no a mi c:).
Ya que estamos con esa lógica, que dios te perdone, por otra parte convertí el amarillo en rojo, ya que es mas llamativo, ademas el amarillo es muy claro y no se nota tanto el parpadeo.

Imagínate cuantas cosas se puede hacer con esta mecánica que me ayudo a programar, por otro lado puse mi juego en itch.io https://naitsabes0.itch.io/red-heart-demo, se que se desvía del tema, pero es a la primera persona que le muestro mi actual proyecto demo fuera de la lista de juegos en desarrollo.
62
Cita de: brunoxzx en Diciembre 16, 2017, 11:14:37 AM
Lo que sucede Naitsabes0 es que las colisiones no se marcan porque nunca las hay. Tu código de movimiento hace que si te estas moviendo a cierta velocidad se detenga justo antes de colisionar, como si fuera un carro y frenara en seco a un centímetro de un niño que va por la calle. Entonces nunca lo atropella jeje. La solución que dí hace que se marque una colisión si el conductor ve a un niño y lleva la velocidad suficiente para aplastarlo y se supone que esto es lo que pasa con los pinchos nunca los tocas pero si llevas la velocidad suficiente dios te detiene justo antes y te marca colisión como si sí los hubieses tocado, porque el te procura y en realidad nunca mueres solo te hace pensar que lo haces transportándote al principio.

El problema es que dios se puso paranoico y para no cometer errores decidió que la fuerza de gravedad individual se detuviera si tuvieses la posibilidad de caer en un pincho (como si lo de antes no fuese suficiente) y añadio está linea al código universal de gravedad "if (vsp < 15 and !place_meeting(x,y+1,obj_Solido)) vsp += grav;", así es dios ama tanto a este individuo que ni siquiera le deja caer a más de 15 de velocidad. Total, ahora como siempre nosotros tenemos que pagar por sus errores y si queremos deshacernos de este mono morado tenemos que quitar esa parte que dice !place_meeting de tal modo que quede así "if (vsp < 15) vsp += grav;" o mejor usando la magia oculta de Soliman puede quedar así "vsp=min(15, vsp+grav)".
Me he dado cuenta de esto.


Resulta que los bloques de color amarillo funcionan como conector de los otros bloques verdes, al momento de colisionar con el amartillo este se destruye el junto con los bloques que estén en contacto, por otra parte, el bloque verde muestra que se están activando los 2 grupos de bloques, a pesar de que ambos grupos de bloques verdes no se están tocando, el bloque amartillo hace de conector, lo que debería suceder, porque este es de otro color, incluso este no parpadea antes de desaparecer.

Al parecer ese detalle era importante para que cada color sea su propio conector.
63
Cita de: brunoxzx en Diciembre 16, 2017, 11:14:37 AM
Lo que sucede Naitsabes0 es que las colisiones no se marcan porque nunca las hay. Tu código de movimiento hace que si te estas moviendo a cierta velocidad se detenga justo antes de colisionar, como si fuera un carro y frenara en seco a un centímetro de un niño que va por la calle. Entonces nunca lo atropella jeje. La solución que dí hace que se marque una colisión si el conductor ve a un niño y lleva la velocidad suficiente para aplastarlo y se supone que esto es lo que pasa con los pinchos nunca los tocas pero si llevas la velocidad suficiente dios te detiene justo antes y te marca colisión como si sí los hubieses tocado, porque el te procura y en realidad nunca mueres solo te hace pensar que lo haces transportándote al principio.

El problema es que dios se puso paranoico y para no cometer errores decidió que la fuerza de gravedad individual se detuviera si tuvieses la posibilidad de caer en un pincho (como si lo de antes no fuese suficiente) y añadio está linea al código universal de gravedad "if (vsp < 15 and !place_meeting(x,y+1,obj_Solido)) vsp += grav;", así es dios ama tanto a este individuo que ni siquiera le deja caer a más de 15 de velocidad. Total, ahora como siempre nosotros tenemos que pagar por sus errores y si queremos deshacernos de este mono morado tenemos que quitar esa parte que dice !place_meeting de tal modo que quede así "if (vsp < 15) vsp += grav;" o mejor usando la magia oculta de Soliman puede quedar así "vsp=min(15, vsp+grav)".
Vaya este tema ha estado por 5 dias activo, pero croe que ha valido la pena.



Ahora es cuando la frase "¿donde esta tu dios ahora" tiene algo mas sentido, supongo que una fuerza mayor llamada código lo mantenía lejos del peligro, pues ya no mas.
64
Cita de: getnoff en Diciembre 16, 2017, 11:37:10 AM
Mira te digo en mi opinión que independiente de si se puede o no, si yo viera un juego llamado metroivania lo vería como cero creativo porque es muy notorio que viene de la fusión de esos juegos y seguramente muchos criticarían por lo mismo, no me parece buena idea para nada... siempre será mucho mejor ser original como lo haces en las gráficas de tus juegos.

Ahora bien, si metroivania fuese el nombre de un personaje (que no sea uno muy principal) creo que quedaría mejor, pero igual no me convence mucho. Yo intentaría que fuese menos evidente, algo como "metronia" o "metronio".
interesante.
65
Si alguien esta haciendo un juego plataformero de exploración, donde uno debe juntar objetos claves, vencer jefes, descubrir lugares secretos y volver por donde estuvo, tendría un genero llamado metroivania, es decir metroid y castlevania, por aquí todo bien, pero ¿y si al juego se le llamara metroivania? técnicamente no hay ningún juego llamado de ese modo, por lo que se podría llamar legalmente a un juego o una franquicia de ese modo ¿no? por otro lado, si a un personaje de fantasía se le llama metroivania ¿tampoco habría conflicto? pues seria un nombre común de personaje como Elver Galarga, Roza Melo por dar unos ejemplos.

¿Entonces que piensan de ello?
66
Cita de: brunoxzx en Diciembre 16, 2017, 01:19:33 AM
A ver.... Intenta hacer al "objeto_muro_color" hijo del "obj_solido" y ademas dejarle la casilla solid marcada de tal modo que los "objeto_muro_color" funcionen bien como muros, pero no como destructibles.

Ahora hay dos cosas que podrían funcionar, la primera es cambiar el código que el "obj_jugador" tiene en el evnto step al evento "end step". Aquí pruebas si ya funciona. Si no, prueba cambiandolo al evento "begin step".

Si eso no sirve deja el código donde estaba y cambia lo último por esto:
[gml]
// Colisiones típicas
var c1=instance_place(x+hsp,y,obj_Solido);
if (c1){
    while(!place_meeting(x+sign(hsp),y,obj_Solido)) x+=sign(hsp);
    hsp = 0;
    with(c1) event_perform(ev_collision, other.object_index);
}
x += hsp;
var c2=instance_place(x,y+vsp,obj_Solido);
if (c2){
    while(!place_meeting(x,y+sign(vsp),obj_Solido)) y+=sign(vsp);
    vsp = 0;
    if (c2!=c1) with(c2) event_perform(ev_collision, other.object_index);
}
y += vsp;
[/gml]
Ahora los pinchos ya no le hacen nada cuando los toca desde arriba, los considera bloques, sin embargo el tacto horizontal y vertical hacia abajo lo destruyen como se puede apreciar en la imagen ¿entonces estaría programado para dañarlo solo cuando esta por abajo de el?.
67
Cita de: NiuWeb en Diciembre 14, 2017, 12:15:27 PM
La función draw_sprite() no crea ni destruye nada, simplemente dibuja un sprite durante un step; toda la pantalla se limpia y actualiza al siguiente de forma automática. Como ya dijo [user]brunoxzx[/user], no se acumula nada, los sprites no son instancias.
¿Entonces estaba haciendo bien las cosas desde un principio?  ???
68
Cita de: brunoxzx en Diciembre 14, 2017, 08:03:24 AM
No sé a que te refieras, pero en definitiva ni tú código crea una instancia por cada vez que dibuja la vida, ni tampoco lo hace el mio. Como dije antes draw_sprite no crea instancias y no se debe usar instance_destroy despues de usar draw_sprite.
Me refería a que cuando algo se creo con draw_sprite(), no se destruye a menos que uno programe que se destruya bajo ciertas condiciones, por ejemplo, al iniciar el juego, se crea el sprite de la vida del jugador al máximo, cuando sufra daño se crea un sprite encima del ultimo sprite, cuando el jugador se recupere, crea otro sprite encima del ultimo, y de esta forma se irán acumulando mas sprite de la vida del jugador, por lo tanto mi código estaba mal, y no se si el suyo también crea un sprite uno tras otro encima del anterior cuando el valor de la vida cambia.
69
Cita de: brunoxzx en Diciembre 14, 2017, 07:23:47 AM
¿Como haces las físicas de tu juego, gravedad y sobre todo, cual es el código que sua tu personaje para colisionar con los muros?
obj_Jugador
CREATE

///Variables
vsp = 0;
hsp = 0;


STEP
actions1

/// Sistema de plataformas
grav = 1;
movespeed = 4;
jumpspeed = 25;
// Gravedad
if (vsp < 15 and !place_meeting(x,y+1,obj_Solido)) vsp += grav;
// Movimiento
left = -keyboard_check(ord('A'));
right = keyboard_check(ord('D'));
move = left + right;
hsp = move * movespeed;
// Salto
jump = keyboard_check_pressed(ord('W')) and place_meeting(x,y+1,obj_Solido);
if(jump) vsp += -jumpspeed;
// Colisiones típicas
if place_meeting(x+hsp,y,obj_Solido){
    while(!place_meeting(x+sign(hsp),y,obj_Solido)) x+=sign(hsp);
    hsp = 0;
}
x += hsp;
if place_meeting(x,y+vsp,obj_Solido){
    while(!place_meeting(x,y+sign(vsp),obj_Solido)) y+=sign(vsp);
    vsp = 0;
}
y += vsp;


STEP
actions2

/// Animación y Dirección
if (hsp != 0) image_speed = 0.5;
else {
    image_speed = 0;
    image_index = 0;   
}
if (hsp < 0) image_xscale = -1;
if (hsp > 0) image_xscale = 1;


obj_Solido
Ningún evento     

///nada


obj_Muro_Color            ///Es hijo de obj_Solido
obj_Bloque_Verde        ///Es hijo de obj_Muro_Color //es solido
obj_Bloque_Amarillo    ///Es hijo de obj_Muro_Color
obj_Pincho_Verde        ///Es hijo de obj_Muro_Color //es solido
obj_Pincho_Amarillo    ///Es hijo de obj_Muro_Color

Resultado:
70
Cita de: brunoxzx en Diciembre 14, 2017, 01:37:50 AM
Cita de: Naitsabes0 en Diciembre 13, 2017, 10:23:34 PM
¿Entonces porque traspaso los objetos aunque los haya activado?
Traspasas los objetos porque no tienen ningún código para colisionar, tú debes hacerlos sólidos y poner el código que normalmente pones a tus muros, también puedes hacer al "obj_muro_color" hijo de tus muros normales si lo consideras conveniente.

y prueba cambiando la parte que dice esto "sign(alarm[0] mod 2)" por una que diga esto "!sign(alarm[0] mod 3)" para que parpadee bien y no se quede en blanco...
Honestamente no quería ponerle el estado solido, porque me puede causar problemas, pero si, creo que haciendo que su padre sea el objeto de las colisiones de murallas es una buena idea, por otro lado logre hacer 2 cosas distintas, el que funciona como suelo y el que funciona como puerta/llave, creo que a futuro tendré que cambiarle el sprite, nombre y el objeto padre, algo asi como obj_Padre_Bloque_Color_Solido y obj_Padre_Bloque_Color_Botón.


Las posibilidades son limitadas por mi imaginación, supongo que puedo dar este tema como finalizado si no fuera porque el jugador se queda inmóvil en la plataforma, en los bloques verdes el jugador mueve sus patitas, pero no puede avanzar ni saltar, claramente porque estos bloques no tienen esas físicas, por lo que su padre debería ser hijo del objeto muralla con esas físicas, pero el resultado final de eso es.


El objeto muralla no tiene códigos, simplemente el jugador lo considera solido, y por ende sus hijos también, pero al parecer los objetos, tanto bloques como pinchos se convierten en paredes comunes sin hacer nada, por lo que tendría que elegir entre una pared que me deja pegado hasta destruirse o unos bloques sin funcionamiento, creo que la 1° es mejor opción.
71
Cita de: brunoxzx en Diciembre 14, 2017, 12:45:46 AM
Para empezar tu código no hace múltiples objetos, puedes usarlo cuantas veces quieras y no tendrás ningún problema de miles de instancias, la función draw_sprite dibuja un sprite en la pantalla durante el step o frame actual y nada más, como el evento draw gui se ejecuta todos los steps o frames entonces tus sprites son dibujados cada frame.

Ahora de que tu método no es nada optimo no lo es, lo natural sería tener sprite de un solo corazón partido en cuatro y re-dibujarlo cuantas veces sea necesario para llenar la vida, pero bueno para hacer tú codigo un poco más optimo sin cambiar nada solo tienes que ponerlo así:

[gml]
draw_sprite(spr_HUD_Vida_Red_Heart, 12-global.vida,72,16)

if global.vida <= 0
{
    global.vida_npc = 0
    effect_create_above (ef_explosion,x,y,0,c_purple);
    audio_play_sound (snd_Risa_Malvada,50,false);
    instance_deactivate_object(obj_Bola_Orbital_Triple);
    instance_deactivate_object(obj_Bola_Orbital_Estrella);
    instance_deactivate_object(obj_Escudo_Protector);
    instance_deactivate_object(obj_Rayo_Esfera);
    instance_deactivate_object(obj_Tiempo);
    instance_deactivate_object(obj_Modo_Contra_Reloj);
    instance_deactivate_object(obj_NPC_Espectador_amigo);
    instance_deactivate_object(obj_NPC_Cazador_amigo);
    instance_deactivate_object(obj_NPC_Caminante_amigo);
    instance_deactivate_object(obj_NPC_Caminante_Amigo_Plataforma);
    instance_deactivate_object(obj_NPC_Merodeador_amigo);
    instance_deactivate_object(obj_NPC_Centinela_amigo);
    instance_deactivate_object(obj_NPC_Infernal_amigo);
    instance_destroy()
}
[/gml]
Creo que alguien se merece un agradecimiento  ;).

Supongo que no estaba asiendo mal las cosas después de todo, el motivo por el cual asumí que había muchos objetos en la misma posición, fue que al cambiarle las coordenadas, este creaba la vida actual  del jugador en sus respectivas coordenadas, pero como aquí todos tenían la misma coordenada, le di a uno otras coordenada, fue hay que me di cuenta que podían haber 12 dibujos en lugar de 1 actual, ya que faltaría la función "instance_destroy", si quieres les cambias las coordenadas y te darás cuenta que mi código no funciona bien.

por otro lado ¿debo asumir que tu código me permite tener una sola imagen en pantalla de la vida actual? no sera que se esconden detrás del sprite ?
72
El jugador tiene vida mostrada en imágenes, 12 para ser exacto.


Aqui todo bien hasta darme cuenta que mi codigo crea imagenes cada vez el valor cambia.

DRAW_GUI

if global. vida = 12
{
    draw_sprite(spr_HUD_Vida_Red_Heart,0,72,16)
}
if global. vida = 11
{
    draw_sprite(spr_HUD_Vida_Red_Heart,1,72,16)
}
if global. vida = 10
{
    draw_sprite(spr_HUD_Vida_Red_Heart,2,72,16)
}
if global. vida = 9
{
    draw_sprite(spr_HUD_Vida_Red_Heart,3,72,16)
}
if global. vida = 8
{
    draw_sprite(spr_HUD_Vida_Red_Heart,4,72,16)
}
if global. vida = 7
{
    draw_sprite(spr_HUD_Vida_Red_Heart,5,72,16)
}
if global. vida = 6
{
    draw_sprite(spr_HUD_Vida_Red_Heart,6,72,16)
}
if global. vida = 5
{
    draw_sprite(spr_HUD_Vida_Red_Heart,7,72,16)
}
if global. vida = 4
{
    draw_sprite(spr_HUD_Vida_Red_Heart,8,72,16)
}
if global. vida = 3
{
    draw_sprite(spr_HUD_Vida_Red_Heart,9,72,16)
}
if global. vida = 2
{
    draw_sprite(spr_HUD_Vida_Red_Heart,10,72,16)
}
if global. vida = 1
{
    draw_sprite(spr_HUD_Vida_Red_Heart,11,72,16)
}
/*if global. vida >= 0
{
    global.perdido = 0
}*/
if global. vida <= 0
{
    global. vida_npc = 0
    effect_create_above (ef_explosion,x,y,0,c_purple);
    audio_play_sound (snd_Risa_Malvada,50,false);
    instance_deactivate_object(obj_Bola_Orbital_Triple);
    instance_deactivate_object(obj_Bola_Orbital_Estrella);
    instance_deactivate_object(obj_Escudo_Protector);
    instance_deactivate_object(obj_Rayo_Esfera);
    instance_deactivate_object(obj_Tiempo);
    instance_deactivate_object(obj_Modo_Contra_Reloj);
    instance_deactivate_object(obj_NPC_Espectador_amigo);
    instance_deactivate_object(obj_NPC_Cazador_amigo);
    instance_deactivate_object(obj_NPC_Caminante_amigo);
    instance_deactivate_object(obj_NPC_Caminante_Amigo_Plataforma);
    instance_deactivate_object(obj_NPC_Merodeador_amigo);
    instance_deactivate_object(obj_NPC_Centinela_amigo);
    instance_deactivate_object(obj_NPC_Infernal_amigo);
    instance_destroy()
}


Como se han podido dar cuenta uso muchos draw_sprite().

if global. vida = "X"
{
    draw_sprite(spr_HUD_Vida_Red_Heart,0,72,16)
}

Pero el problema es que nunca los destruyo, y como se crean en las  mismas coordenadas que sus antecesores, da la sensación que hay una sola imagen cuando en realidad hay 1 imagen por cada vez que el valor sea alterado, a largo plazo el jugador habrá colisionado con 1000 objetos dañinos y tendrá como 1000 imágenes por daño en vez de 1, por lo tanto.

¿Que debo hacerle al código para que los corazones de vida se mantengan en una sola imagen?

NOTA: No quiero creear números o barras de vida, ya que esto no es un RPG o un juego donde uno sea inevitablemente golpeado, es un plataformas simple donde hay que evitar enemigos.
73
¿Entonces porque traspaso los objetos aunque los haya activado?
74
Cita de: bochaPastore en Diciembre 12, 2017, 12:53:09 PM
No estoy seguro, pero creo q el game_load funciona como ciclo while, donde si no puede abrir el archivo, lo sigue intentando.
El archivo existe?
De ser asi, tiene el mismo nombre?

Al principio no hay archivo, pero el jugador esta obligado a guardar partida para poder pasar un muro invisible que solo se destruye cuando el jugador guarda partida, el objeto de guardado tiene esto.

obj_Guardar

CREATE

image_speed = 0.1;

paginas[0] = "¿Guardar partida?#Pulsa Z para guardar -->";
paginas[1] = "Juego guardado# pulsa P para cargar -->.";

mostrar = false; // mostrar cartel por defecto
pagina = -1;     // páigna actual, -1 = inactivo
guardar="guardar.sav"
eliminar=false



STEP

/// Detectar si jugador abre el cartel
if (keyboard_check_pressed(ord('Z')) and distance_to_object(objJugador)<3) {
    mostrar = true;
}
// Si se aleja cerramos el cartel y reiniciamos pagina
if (distance_to_object(objJugador)>3) { mostrar = false; pagina = -1; }

/// Detectar si jugador pasa página y guardar
if (keyboard_check_pressed(ord('Z')) and mostrar)
    // Pasar página y guardar (solo al pasar la primera)
    if (pagina+1 < array_length_1d(paginas)) {
        pagina++;
        if (pagina == 1){
       
        game_save("guardar.sav")
        instance_deactivate_object(obj_Bloque_Guardado);
        }
    } else {
        // Si nos pasamos del máximo reiniciamos el cartel
        mostrar = false;
        pagina = -1;
    }
   
    if keyboard_check_pressed(ord("P")){
game_load("guardar.sav")
}



DRAW GUI

//para poder ver el objeto
draw_self()
/// Comprobar si el jugador está cerca
if(mostrar){
    draw_sprite(spr_HUD_Texto,11,0,31);
    draw_set_font(f_Texto);
    draw_set_halign(fa_left);
    draw_set_color(c_black);
    draw_text(124,64,paginas[pagina]);
    draw_set_color(c_white);
    draw_text(123,63,paginas[pagina]);
}


Como dije no hay razón para que haya un bucle infinito, este problema me sale cuando cargo la partida, pero es al azar, es decir abecés carga y  todo normal y por otro lado falla cuando quiere, diría que hay como 3/4 de que corra normal vs 1/4 de que falle.
75
Cita de: brunoxzx en Diciembre 12, 2017, 07:58:02 PM
Debes de poner "event_inherited()" en el evento create de los objetos que heredan y debe de ir después de poner el código de image_blend. Ese error es solo porque no tienen la variable color, también puedes declararla directamente en el evento create de esos objetos.



Le he programado lo que me ha dicho, sin embargo considera a los objetos como traspasables, se que podría solucionar esto asiéndolo solido, pero la colisión de estos objetos esta destinada al jugador, se puede apreciar que los pinchos y bloques responden a tu función al colisionar, pero deja caer al jugador antes de desaparecer.

Honestamente este resultado es genial ¿porque digo esto? imagínate que el bloque fuera un botón y los pinchos sus puertas, sin querer queriendo he descubierto que puede ser el típico mecanismo llave/ puerta, aun así me gustaria saber porque esta fallando la colisión con el jugador, al resolver este problema ya puedo dar por terminado este post que se ha extendido por 3-4 días.