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

376
Preguntas y respuestas / Re:Experimento con enlaces
Agosto 21, 2017, 06:10:54 AM
Cita de: TheWood en Agosto 21, 2017, 02:19:17 AM
Sí,funcionan todos los links.  ;)


( ͡^ ͜ʖ ͡^) spam ninja
Es bueno saber que de 22 lecturas, 1 se animo a responder  :), no es por ser hostigoso o causar incomodidad, pero ¿puede decirme a que lugares llego con los enlaces de prueba que estuve practicando? ya que soy nuevo en esto de colocar los link sin usar el inserte imagen.
377
Preguntas y respuestas / Experimento con enlaces
Agosto 21, 2017, 02:12:01 AM
Bueno esto es un asunto pequeño, solo quiero saber si estos enlaces que he colocado sirven, ya que como llevo mas del 90% del juego terminado, lo que resulta un alivio porque estoy desde el mes 8 de 2016 con esto, por lo que podría decirse que llevo un .........  :o, vaya como pasa el tiempo cuando uno programa y hace sus actividades diarias, en fin aquí dejare estos enlaces para que me digan si funcionan, en caso contrario me gustaría que me dijeran el método adecuado para hacer dicha acción.  :)


Canal de música: https://www.youtube.com/channel/UCht8qITGkBvXKsR1Byln-wA
Sitio de juegos: https://opengameart.org/
El canal que empece a usar recientemente para hacer publicaciones: https://www.youtube.com/channel/UCw06HXsy1tPNcZIsNkb483w
378
Cita de: Zapdos43 en Agosto 20, 2017, 04:55:25 PM
Escudo_rayo:
create event:
[gml]
alarm[0] = room_speed * 10; // 10 segundos para autodestruirse
[/gml]

alarm[0]:
[gml]
instance_destroy();
[/gml]

step event:
[gml]
// colocar el escudo rayo en el centro del personaje
x = personaje.x + 8;
y = personaje.y -12;
// detectar colisiones con enemigos
// radio = 48 px (mitad de 96)
cc = collision_circle(x, y, 48, objeto_padre, false, false);
if (cc)
{
     with(cc)
     {
       instance_destroy();
     }
}
[/gml]
Tu código fue fantástico  :).
379
Cita de: Zapdos43 en Agosto 20, 2017, 03:37:15 PM
Creo recordar que tu escudo era circular, te servirá la función collision_circle:

evento Step:
[gml]if instance_exists(objeto_escudo) // nos aseguramos de que existe el escudo
{
cc = collision_circle(x, y, radio, objeto_padre, false, false); // copiamos el ID del objeto que colisiona
if (cc) // si existe ID
{
with(cc) instance_destroy();
}
}[/gml]

Dentro de la función de collision_circle debes indicar las coordenadas x,y que serán el centro del círculo. Si tu sprite está centrado, puedes poner "personaje.x" y "personaje.y". En radio debes poner el radio del círculo medido en pixeles. Por ejemplo, si el escudo tiene un diámetro de 20 px, el radio es (diámetro/2) = 10 px.
Creo que debí mencionar que los objetos tienen su sprite, ya que este código me aleja un poco de lo que busco, pues los sprite tienen estas características, ya que planeo que se vea estéticamente bien con su animación electrificante  ;D, bueno mal chiste  :-[, pero si lo creo con código seria un circulo común como el que programe en la linterna.


Quiero aclarar que el escudo protector y el rayo esférico son 2 poderes distintos que no tienen ninguna relación entre ellos, ya que el protector como su nombre lo dice protege al jugador, pero solo de proyectiles, mientras que el rayo esférico envuelve por completo al jugador eliminando todo a su paso por un lapso de tiempo, en el GIF se puede apreciar como el rayo esférico es mas grande que el escudo protector, ya que este es la defensa definitiva por unos cuantos segundos.
380
Cita de: Zapdos43 en Agosto 20, 2017, 11:32:19 AM
En evento Step del Jugador, en el primer Execute code coloca arriba del código:

[gml]
// hacer invisible al jugador cuando entre a la room final
if (room == room_final)
{
visible = false;
}[/gml]

Luego en el evento Draw GUI del jugador, en el primer Execute code coloca arriba del código:
[gml]// no seguir leyendo el código cuando visible es false
if (!visible)
{
exit;
}[/gml]

Repite este último paso para el evento Draw GUI del objeto controlador.
objJugador
STEP::::::::::::::::::::::
// hacer invisible al jugador cuando entre a la room final
if (room == room_final)
{
visible = false;
}
DRAW GUI::::::::::::::::::::::::::::::::::::
// no seguir leyendo el código cuando visible es false
if (!visible)
{
exit;
}

obj_Controlador
DRAW GUI:::::::::::::::::::::::::::::::::::
///GAME OVER Visible
// no seguir leyendo el código cuando visible es false
if (!visible)
{
exit;
}
if  (global.perdido >= 0) {
    image_alpha = 1;
    }

Se agradece el apoyo, pero creo que tendré que dejar este tema de lado, ya que encontré una solución poco practica, pero eficiente, la cual es comentar los códigos que activan el GAME OVER, de esa forma cuando el jugador muera no saldrá GAME OVER, pero tampoco saldrá cuando muera en el desarrollo del juego, algo es algo  :), como ya he gastado mucho tiempo en este problema, me he estado desempeñando en hacer un "power up" similar a la estrella de mario en este otro post http://www.comunidadgm.org/preguntas-y-respuestas/quiero-armar-de-la-forma-mas-eficiente-este'power-up'/
381
Cita de: TheJaj en Agosto 20, 2017, 03:12:04 AM
Fácil, crea un padre para el padre de tu objetos.
El primero sera el padre al que harás referencia para matar a todo lo que mate tu escudo de rayo.
Los segundos padres serán los encargados de dividir en sub-grupos (Enemigos, la princesa que te friendzoneo, el que te robo la dignidad, los arboles(si eres jardinero)).

Solo haces que el escudo al tocar al "primer padre" este muera y todos los objetos hijos a este morirán. :D
De por si los objetos enemigos ya tienen su padre, por eso no he creado un padre de ellos, ya que si empiezo a relacionar objetos padre con mas objetos padre tendré un problema mayor a futuro, por lo que el problema de enemigos y tiempo todavía persiste.
382
NOTA: Coloque todos los detalles a considerar desde mi punto de vista, el problema es mencionado al final del post.

Este "power up" que voy a crear tiene una característica que lo convierte en el poder mas roto del juego que estoy creando, consiste en que todos los enemigos que entren en contacto con el sean destruidos al instante, creo que el mejor ejemplo que puedo dar es este, y claro también entra el factor tiempo


La idea es crear una sola colisión que se aplique a todos estos objetos.

Por ejemplo estos son 8 enemigos de los 24 que hay.
objEnEspectador
objEnCazador
objEnCaminante
objEnMerodeadorH
objEnMerodeadorV
objEnCentinela
objEnInfernalV
objEnInfernalH

Si algo se es que debo considerar estos 2 objetos para que se vea similar, ya que no quiero que se parezca visualmente al juego que muestra el GIF

1.- El obj_Poder_Rayo //El cual es equivalente al objeto estrella, solo que este no se mueve, lo que aria mas fácil aun de programar.
2.- El obj_Escudo_Rayo //El cual es equivalente a mario con estrella, solo que esta lo encierra en su interior destruyendo todo enemigo a su paso por un lapso de tiempo X.

La forma en la que he armado un código similar a estas características es la siguiente.

1.- obj_Poder_Escudo_Jugador
CREATE::::::::::::::::::::::::::::::
///Animacion
image_speed = 0.1;
COLLISION CON EL objJugador::::::::::::
///Creacion de las bolas
instance_create(x+objJugador,y+objJugador,obj_Escudo_Protector);
effect_create_above (ef_firework,x,y,1,c_yellow);
audio_play_sound (snd_Laser2,50,false);
instance_destroy()

Por lo que podría decirse que no tengo problemas en la parte 1° solo es una idea de como arme el código.

2.-obj_Escudo_Protector
CREATE::::::::::::::::::::::::::
///Variables
image_speed = 0.1;
aguante_escudo = 3;
STEP:::::::::::::::::::::::::::::::
///Codigo de la bola
action_potential_step(objJugador.x,objJugador.y-8,room_height+room_width,false);
if(aguante_escudo < 0)
    {
    aguante_escudo = 0
    instance_destroy();
    }
COLLISiON objBullet :::::::::::::::::::::::::::
///Dañar escudo
effect_create_above (ef_firework,x,y,0,c_yellow);
effect_create_above (ef_ring,x,y,0,c_purple);
audio_play_sound (snd_Disparo_De_Fuego,50,false);
aguante_escudo -= 1;

Pues aquí esta el problema, el poder tendría su animación, ademas de que seguiría al jugador sin problemas, pero en alguna parte debería programar la famosa colisión contra todos los enemigos junto a su temporizador, puedo hacer la colisión contra todos los enemigos, pero como son 8x3=24 objetos, seria engorroso ir 1 por 1, así que debería hacer una lista de todos los objetos que se destruirán cuando entre en contacto con el El obj_Escudo_Rayo

Gracias por llegar hasta este punto.
383
Cita de: Zapdos43 en Agosto 19, 2017, 01:33:44 PM
Entonces, hacerlo invisible tiene el incoveniente de activar el game over en la room final. Podrías activar el game over solo cuando el personaje está visible.
Sería algo así:
if (visible) // si el personaje es visible entonces comprobar el game over
{
// código del game over
}


Otra manera de hacer "invisible" al personaje es mandarlo fuera de la pantalla:
evento step:
if (room == room_final)
{
x = 2000;
y = 0;
}


Luego desactivamos el HUD en el evento draw con la siguiente condición:

if (room != room_final) // si la room no es la room final entonces dibujamos el HUD
{
// todo el código para dibujar el GUI
}

Creo que el mayor problema para hacer posible esto radica en que el código de game over es demasiado engorroso, para ser preciso están todos estos factores involucrados.

El objJugador tiene 8 actions en el draw GUI.


/// Vida Red Heart
if global. vida = 12
{
    draw_sprite(spr_HUD_Vida_Red_Heart,0,80,16)
}
if global. vida = 11
{
    draw_sprite(spr_HUD_Vida_Red_Heart,1,80,16)
}
...........................se repite esta secuencia hasta llegar a
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_Tiempo);
    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()
}

/// Llaves jefe
if global.llaves_jefe = 6
{
    draw_sprite(spr_HUD_LlaveNegra_Jefe,6,0,344)
}
if global.llaves_jefe = 5
{
    draw_sprite(spr_HUD_LlaveNegra_Jefe,5,0,344)
}
..............la secuencia se repite hasta llegar a
if global.llaves_jefe = 0
{
    draw_sprite(spr_HUD_LlaveNegra_Jefe,0,0,344)
}
En las otras "actions" el proceso es el mismo

en el obj_Controlador hay esto //alarma 0 esta comentado


/// Inicializacion
display_set_gui_size(384,384);
global.zona = "";
global.perdido = -1;

alarm[0] = 1; // dar un fotograma de prevención antes de cargar
imagen_random=choose(0,1,2,3,4,5,6);
texto_random1=choose("Te han roto el corazon... ","Te han hecho pedazos... ","Te han eliminado... ","Te han destruido... ","Te han matado... ");
texto_random2=choose("Pulsa P para volver el tiempo atras","Pulsa P para regresar","Pulsa P para volver a intentarlo","Pulsa P para reiniciar","Pulsa P para otro intento");
globalvar dificultad_oscuro,dificultad_normal,dificultad_furioso;
dificultad_normal=12;
dificultad_furioso=6;
dificultad_oscuro=1;

Draw GUI
///GAME OVER Visible
if  (global.perdido >= 0) {
    image_alpha = 1;
    }

/// Dibujar el HUD
// Dibujar nombre de la zona
draw_set_color(c_white);
draw_set_font(f_Texto);
draw_set_halign(fa_right);
draw_text(view_wview-8,view_hview-22,string_upper(global.zona));

// Dibujar has perdido poco a poco
if  (global.perdido >= 0) {
    randomize();
    global.perdido = clamp(global.perdido+0.005,0,1);
    draw_set_alpha(global.perdido);
    draw_set_color(c_black);
    draw_rectangle(0,0,view_wview,view_hview+50,false);
    draw_sprite(spr_Perdido,imagen_random,view_wview/3,175); //draw_sprite(spr_Perdido,0,view_wview/2,175);
    draw_set_color(c_white);
    draw_set_font(f_Texto);
    draw_set_halign(fa_center);
    draw_text(view_wview/3,175,texto_random1);
    draw_text(view_wview/3,200,texto_random2);
    draw_set_alpha(1);
}

Como puede ver creo que este código es demasiado engorroso solo para sacar la ventana de GAME OVER cuando el jugador o NPC de apoyo se queda sin vida.
384
Cita de: Zapdos43 en Agosto 19, 2017, 11:09:33 AM
Podrías hacerlo invisible:

if (room == nombre_room)
{ visible = false; }


Esto hará invisible al sprite del objeto y a las funciones Draw que tenga en su evento Draw.

Por otro lado si tienes interés de desactivar la caraterística de Persisten usa:
if (room == nombre_room_antes_del_final) // si el personaje está en la room previa al final
{ persistent = false; }

Si aplico su primer código el jugador muere al entrar y activa el game over, asiendo que la pantalla se ponga negra, en pocas palabras este código mata al objeto jugador cuando entre en la rom_final
if (room == rom_final)
{ visible = false; }

El otro código hace que el jugador muera cuando abandone la habitación seleccionada, aunque lo aga antes de entrar al final, este también activa el Game over, por lo que en ambos casos la pantalla se volverá negra, ya que el objeto esta muerto cuando hace la transición a otra room
if (room == nombre_room_antes_del_final) // si el personaje está en la room previa al final
{ persistent = false; }

Aquí se puede apreciar como el jugador muere cuando abandona la habitación, ya que perdió su función persistente al entrar en ella, en el otro caso muere de forma instantánea cuando entra, por lo que tengo 2 conclusiones.

1.- En la primera muere al entrar.
2.- En la segunda muere al salir.

Pero al menos se ve que el jugador si desaparece  :), solo que no debe estar muerto  :D.
385
Bueno técnicamente tengo 4 finales en el juego que estoy creando  :D, pero hay un problema con estos que los hace ver muy mal, hasta el punto de resultar molesto a la vista en vez de ser satisfactorio, el problema es que el personaje del jugador sigue presente en la "room" donde salen los créditos del juego (final), esto se debe a que es un objeto persistente, ademas que trae consigo la interfaz gráfica, por lo que se ven los objetos y hasta la vida del jugador en pantalla   :-\, no puedo eliminarlo, ya que de hacerlo se activa el "GAME OVER" , por lo tanto mi pregunta seria.

¿Como debería armar un código para que el jugador deje de ser persistente cuando vaya a una "room" especifica?

Aquí dejo un GIF que muestra como el personaje se pasea de lo mas normal por los créditos del juego sin desaparecer, ademas que su interfaz también molesta a la vista como he mencionado con anterioridad.

Gracias por leer  :).
386
Vaya solo debía cambiarlo de arriba a abajo  :-[.

Gracias.  :)
387
Pues así es como se ve.

Lo que esta arriba es el cuadro decorativo que contiene el tiempo del jugador, se logra apreciar que hay unos pixeles rojos en movimiento detrás de el, esto no es mas que el tiempo del jugador, y el problema como dice el texto, es que el cuadro esta encima de el cuando debería estar detrás de el, el problema es que ambos "sprite" no tienen objeto, ya que es un objeto controlador quien lo crea con códigos.

obj_Tiempo
// evento Draw GUI
///Dibuja el tiempo actual
draw_set_halign(fa_middle);
draw_set_valign(fa_middle);
draw_set_color(c_red);
draw_text(objJugador+24,objJugador-184,string(global.tiempo));
draw_sprite(spr_HUD_Tiempo,0,objJugador+48,objJugador-168);

En este caso es el obj_Tiempo quien crea el texto y el "sprite", al jugador solo lo siguen como se aprecia en el GIF.

La solución que busco es simple ¿Que debo agregar a este código para que el texto este encima del "sprite"?

Saludos.
388
Cita de: Zapdos43 en Agosto 16, 2017, 11:09:07 PM
El error dice que no se puede leer la variable global. vida_npc
Fíjate que entre global. y vida_npc hay un espacio. Hay que escribirlo todo seguido: global.vida_npc.
Aun lo marca como fallo no creo que el problema sea ese, debe haber un fallo en el ejemplo que hace que entre en conflicto con la variable del error.
FATAL ERROR in
action number 1
of Create Event
for object obj_NPC_Cazador:

Variable <unknown_object>.vida_npc(100013, -2147483648) not set before reading it.
at gml_Object_obj_NPC_Cazador_CreateEvent_1 (line 3) - global.vida_npc -= 6
389
Cita de: Zapdos43 en Agosto 16, 2017, 10:18:51 PM
El objeto NPC no reconoce la variable global porque todavia no ha sido creada, se creará cuando llegues a la room donde se encuentra el objeto Jefe. Pero eso no es lo que queremos entonces debemos colocar en el create event del NPC:
global.borrado = false;
Y borrar el código del create event del Jefe. El resto se queda igual.
FATAL ERROR in
action number 1
of Create Event
for object obj_NPC_Cazador:

Variable <unknown_object>.vida_npc(100013, -2147483648) not set before reading it.
at gml_Object_obj_NPC_Cazador_CreateEvent_1 (line 3) - global. vida_npc -= 6

Creo que debo mencionar los códigos involucrados, ya que tengo 6 jefes y probablemente se destruyan los 6 en vez de 1 en especifico.
obj_NPC_Cazador
CREATE///////////////////////////////////////////
///Variables
global.jefe_cazador = false;
global. vida_npc -= 6
audio_play_sound (snd_Risa_Malvada,50,false);
STEP/////////////////////////////////////////////////
///Comprobar si su nemesis fue destruido
if (global.jefe_cazador)
    {
    instance_destroy();
    }
obj_Jefe_Cazador
CREATE///////////////////
global.jefe_cazador = false;
DESTROY///////////////////////////////
///Comprobar si fue destruido
global.jefe_cazador = true;
390
No sirve ese código, o al menos esta incompleto.  :-\
############################################################################################
FATAL ERROR in
action number 1
of  Step Event0
for object obj_NPC_Cazador:

global variable <unknown built-in variable>(-1610512724, -2147483648) not set before reading it.
at gml_Object_obj_NPC_Cazador_StepNormalEvent_1 (line 2) - if (global.borrado)
############################################################################################