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

391
Abajo están los detalles de mi problema, se puede resumir en que quiero destruir objetos de otra habitación cuando el personaje haya cumplido su deber.  :)

Digamos que un personaje al que llame obj_NPC_Cazador, el cual como su nombre indica es un NPC, este objeto o personaje quiere destruir a su enemigo, el obj_Jefe_Cazador, pero tanto el obj_NPC_Cazador como el obj_Jefe_Cazador, se encuentran en distintas habitaciones, en este caso vendría siendo la rom_Zona_Nexo para el obj_NPC_Cazador y la rom_jefe_Cazador para el obj_Jefe_Cazador (admito que los nombres no son poco original  :-[).

Entonces mi pregunta seria ¿Como debería armar el código para que el obj_NPC_Cazador se destruya cuando el obj_Jefe_Cazador sea destruido?

Nota: Lo que busco con esto es que de la sensación de que el personaje se haya marchado una vez que cumplió su misión, ya que seria raro encontrarlo hay mismo diciendo que quiere matar a su enemigo a pesar de que ya lo logro.  XD

Gracias por leer.
392
Preguntas y respuestas / Tengo un asunto que exponer
Agosto 16, 2017, 04:44:19 AM
Probablemente esta información que este colocando no esta en el sitio correcto, como estuve algunos meses fuera de la comunidad, me he centrado en el tema de preguntas y respuestas, por lo que si esta información debe ir en otro sitio, agradecería que me lo informaran, sin mas dilatación aquí esta mi exposición.



He estado creando mi proyecto de vídeo juegos como muchos de los presentes que estamos en esta comunidad, sobre todo de los motores  :GM8:, :GMS:, :GMHTML5:, :GMMAC:, en mi caso seria el  :GMS:, pero la razón principal por la que arme este post es que por fin comenzare a darle mayor uso al canal de you tube, esto con el fin de hacer públicos mis avances, lo que me permitirá compartir el contenido de lo que tengo con mas gente que este interesada, ademas de que recibiré mensajes para ver la opinión de la gente, pero también podre dar respuestas, siempre que vengan con la buena intención.

Aquí les dejo el material que comenzare a subir poco a poco, que tengan un buen día/noche.  :)
https://www.youtube.com/channel/UCw06HXsy1tPNcZIsNkb483w

393
Cita de: TheWood en Agosto 15, 2017, 04:57:44 AM
Y en vez de colocar

with(id_bola) { .....}

mejor colocas

id_bola.valor = (el valor)

Y angulo_bola es la ¿velocidad o la distancia?

angulo_bola = angulo_bola + 6; //velocidad de las bolas

///Creacion de las bolas
for(i=0; i<3; i++) //cantidad de bolas
    {
     id_bola=instance_create(objJugador.x, objJugador.y, obj_Bola_Orbital_Triple)
     with(id_bola) {angulo_bola=120*other.i} // distancia de las bolas
    }


Si es la velocidad entonces deberías cambiar ese for i a

///Creacion de las bolas
for(i=0; i<3; i++) //cantidad de bolas
    {
     id_bola=instance_create(objJugador.x, objJugador.y, obj_Bola_Orbital_Triple)
     with(id_bola) {radio_bola=120*other.i} // distancia de las bolas
    }

Aplicar el código que me ha enseñado no sirve para resolver el problema, sin embargo los resultados fueron algo interesantes e inesperados.

debo admitir que se ve interesante  :o, dejare guardado ese código para un futuro proyecto  :), pero aun así no logre hacer que los 2 poderes orbiten en dirección opuesta en un radio distinto  :-\, pero bueno al mal tiempo buena cara, seguiré en otra área del juego mientras espero alguna respuesta que me lleve a la solución.

Irónicamente el mismo código funciona bien en el proyecto de testeo que tengo en gm:S
394
Cita de: 3dgeminis en Agosto 15, 2017, 02:35:09 AM
O podes poner el angulo_bola negativo : -angulo_bola o multiplicarlo por 1 o -1 : angulo_bola*=-1
Primera vez que escucho eso del negativo colocado en las variables, solo le di valor negativo, es decir 6 a uno y -6 a otro, al igual que el radio de uno es 60 mientras que el otro es 120, pero no se ejecuta.
395
Cita de: TheWood en Agosto 15, 2017, 02:26:23 AM
He conseguido que giren a la distancia y en el horario necesario.


en "radio_bola" colocas la distancia necesaria.

objBola_Antihorario

Step:
///Codigo de la bola
x = objPlayer.x + cos(degtorad(angulo_bola)) * radio_bola;
y = objPlayer.y - sin(degtorad(angulo_bola)) * radio_bola;
angulo_bola -=  6; //velocidad de las bolas


objBola_Horario

Step:
///Codigo de la bola
x = objPlayer.x + cos(degtorad(angulo_bola)) * radio_bola;
y = objPlayer.y - sin(degtorad(angulo_bola)) * radio_bola;
angulo_bola +=  6; //velocidad de las bolas

sigue igual.  :-\

Ademas el valor negativo y positivo ya lo tienen, solo que no funciona, y respecto al radio, ambos ya tienen su diferencia, es decir 60 y 120 pixeles, pero la dirección y el radio no han cambiado, pese a que los valores son distintos el comportamiento es el mismo.
396
Cita de: Zapdos43 en Agosto 15, 2017, 12:02:53 AM
No conozco la función action_potential_step pero imagino que los dos primeros parámetros que te piden son la x e y. Por eso en el objeto del Escudo, en su evento Step debería ser:
action_potential_step(objJugador.x,objJugador.y,room_height+room_width,false);

Corrígeme si estoy equivocado.
Gracias al cambio que me menciono logre hacer que el escudo aparezca, ademas estuve progresando aun mas en el problema de los proyectiles, por lo que tengo 2 problemas ahora en lugar de 3.

El problema todavía es que el obj_Bola_Orbital_Triple debería estar a 60 pixeles lejos del jugador rotando en dirección anti-horaria, mientras que el obj_Bola_Orbital_Estrella, debería estar a 120 pixeles lejos del jugador en dirección horaria, por lo que deben girar en dirección opuesta y tener distinto radio.

Esta es la diferencia que he logrado con el antes

y después.

Visualmente ha quedado mejor pero si los poderes orbitales todavía giran al mismo lado y tienen el mismo radio.

El código que he implementado hasta ahora es

obj_Copia_Bola_Orbital_Triple
create:
///Animacion
image_speed = 0.1;
image_blend = c_yellow;
image_alpha = 1;
step:
///Efecto estela
image_alpha -= 0.1;
if image_alpha < 0 instance_destroy();

obj_Bola_Orbital_Triple
create:
///Variables
radio_bola = 60; //distancia de las bolas
angulo_bola = 0;
step:
///Codigo de la bola
x = objJugador.x + cos(degtorad(angulo_bola)) * radio_bola;
y = objJugador.y - sin(degtorad(angulo_bola)) * radio_bola;
angulo_bola = angulo_bola + 6; //velocidad de las bolas

instance_create(x,y,obj_Copia_Bola_Orbital_Triple);
instance_create(xprevious,yprevious,obj_Copia_Bola_Orbital_Triple);

obj_Bola_Orbital_Estrella
create:
///Variables
radio_bola = 120; //distancia de las bolas
angulo_bola = 0;
step:
///Codigo de la bola
x = objJugador.x + cos(degtorad(angulo_bola)) * radio_bola;
y = objJugador.y - sin(degtorad(angulo_bola)) * radio_bola;
angulo_bola = angulo_bola - 6; //velocidad de las bolas

instance_create(x,y,obj_Copia_Bola_Orbital_Triple);
instance_create(xprevious,yprevious,obj_Copia_Bola_Orbital_Triple);

obj_Poder_Bola_Orbital_Triple
create:
///Animacion
image_speed = 0.1;
collisionobjJugador:
///Creacion de las bolas
for(i=0; i<3; i++) //cantidad de bolas
    {
     id_bola=instance_create(objJugador.x, objJugador.y, obj_Bola_Orbital_Triple)
     with(id_bola) {angulo_bola=120*other.i} // distancia de las bolas
    }
effect_create_above (ef_firework,x,y,1,c_purple);
audio_play_sound (snd_Laser,50,false);
instance_destroy()

obj_Poder_Bola_Orbital_Estrella
create:
///Animacion
image_speed = 0.1;
collisionobjJugador:
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
    {
     id_bola=instance_create(objJugador.x, objJugador.y, obj_Bola_Orbital_Triple)
     with(id_bola) {angulo_bola=72*other.i} // distancia de las bolas
    }
effect_create_above (ef_firework,x,y,1,c_purple);
audio_play_sound (snd_Laser,50,false);
instance_destroy()
397
Cita de: Zapdos43 en Agosto 14, 2017, 12:38:46 PM
Los siguientes videotutoriales te podrían ayudar:
Video 1: https://www.youtube.com/watch?v=dYbCfhX3Hu4
Video 2: https://www.youtube.com/watch?v=xU6w0oXRoz0&t=726s

Espero te sirvan.

Después de estar interpretando el código de los tutoriales de ingles, llegue a armar lo que buscaba, sin embargo la linterna oculta al personaje y no he visto la razón de porque esta ocurriendo, le he cambiado las "depth" en el acceso rápido al jugador para que tenga -1000, ya que el sprite invisible de la luz tiene -999.

Esto es lo que logre armar durante muchas horas de prueba y error.

obj_Luz "sin sprite"
depth -999
create:
///Crear la superficie

superficie = surface_create(room_width, room_height);

surface_set_target(superficie);
draw_clear_alpha(c_black, 0);

//Reinicia la superficie
surface_reset_target();

step:
///Control de la oscuridad
if (surface_exists(superficie)){
    surface_set_target(superficie);
   
    //conjunto oscuridad
    draw_set_colour(c_black);
    draw_set_alpha(1); //intencidad de la oscuridad 0 nada 1 absoluta
    draw_rectangle(0, 0, room_width, room_height, false);
   
    //conjunto circulos
    draw_set_blend_mode(bm_subtract);
   
   
    draw_set_colour(c_black);
    draw_set_alpha(0.2);
   
   
    // dibuja circulos
    with (obj_Jugador) {
        draw_circle(x + random_range(-1,1), y + random_range(-1,1), 80 + random_range(-1, 1), false);
       
        }
       
        draw_set_colour(c_white);
        draw_set_alpha(1);
       
        with (obj_Jugador) {
        draw_circle(x + random_range(-1,1), y + random_range(-1,1), 45 + random_range(-1, 1), false);
       
        }
       
       
       
    //Reinicia todo el conjunto dibujo
    draw_set_blend_mode(bm_normal);
    draw_set_alpha(1);
    surface_reset_target();
} else {
    superficie = surface_create(room_width, room_height);
    surface_set_target(superficie);
    draw_clear_alpha(c_black, 0);
    surface_reset_target();
}

room end:
/// destruir la superficie
if (surface_exists(superficie)) {
    surface_free(superficie);
}

draw:
///Dibuja la superficie

if (!surface_exists(superficie)) {
    superficie = surface_create(room_width, room_height);
} else {
    if (view_current == 0) {
        draw_surface(superficie, 0, 0);
    }
}
398
Nota: El problema que tengo se resume en 4 lineas al final del post, pero los detalles involucrados están a continuación.

Todavía sigo recuperando la información perdida, esta vez es de los "powe up" o aumento de poder, en total son 5, de los cuales 3 no están funcionando como deben, como estos poderes son diferentes a los que uno ve en tutoriales, y que ademas me falta poco código para que queden bien, solo necesito una pequeña modificación.

Estos son los "power up" defectuosos.

Como han podido ver hay 5 objetos que se destruyen y activan un efecto en el personaje, pero solo 3 tienen estos problemas como se ve en el GIF, estos serian los objetos involucrados.

Estos serian sus codigos

obj_Bola_Orbital_Triple
create:
///Variables
radio_bola = 60; //distancia de las bolas
angulo_bola = 0;
step:
///Codigo de la bola
x = objJugador.x + cos(degtorad(angulo_bola)) * radio_bola;
y = objJugador.y - sin(degtorad(angulo_bola)) * radio_bola;
angulo_bola = angulo_bola + 4; //velocidad de las bolas

obj_Bola_Orbital_Estrella
create:
///Variables
radio_bola = 120; //distancia de las bolas
angulo_bola = 0;
step:
///Codigo de la bola
x = objJugador.x + cos(degtorad(angulo_bola)) * radio_bola;
y = objJugador.y - sin(degtorad(angulo_bola)) * radio_bola;
angulo_bola = angulo_bola - 4; //velocidad de las bolas

obj_Escudo_Protector
create:
///Variables
image_speed = 0.1;
step:
///Codigo de la bola
action_potential_step(objJugador,objJugador,room_height+room_width,false);

obj_Poder_Bola_Orbital_Triple
create:
///Animacion
image_speed = 0.1;
collision objJugador:
///Creacion de las bolas
for(i=0; i<3; i++) //cantidad de bolas
    {
     id_bola=instance_create(objJugador.x, objJugador.y, obj_Bola_Orbital_Triple)
     with(id_bola) {angulo_bola=120*other.i} // distancia de las bolas
    }
effect_create_above (ef_firework,x,y,1,c_purple);
audio_play_sound (snd_Laser,50,false);
instance_destroy()

obj_Poder_Bola_Orbital_Estrella
create:
///Animacion
image_speed = 0.1;
collision objJugador:
///Creacion de las bolas
for(i=0; i<5; i++) //cantidad de bolas
    {
     id_bola=instance_create(objJugador.x, objJugador.y, obj_Bola_Orbital_Triple)
     with(id_bola) {angulo_bola=72*other.i} // distancia de las bolas
    }
effect_create_above (ef_firework,x,y,1,c_purple);
audio_play_sound (snd_Laser,50,false);
instance_destroy()

obj_Poder_Escudo_Jugador
create:
///Animacion
image_speed = 0.1;
collision 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()

El problema es...

El obj_Escudo_Protector no se crea cuando el jugador destruye el obj_Poder_Escudo_Jugador.

El obj_Bola_Orbital_Triple debería estar a 60 pixeles lejos del jugador rotando en dirección anti-horaria, mientras que el obj_Bola_Orbital_Estrella, debería estar a 120 pixeles lejos del jugador en dirección horaria, por lo que deben girar en dirección opuesta y tener distinto radio.
399
Cita de: NiuWeb en Agosto 14, 2017, 03:26:37 AM
Creo que el GameMaker: Studio viene con un tutorial de ello, ahí hay un código completo de eso. Puede que te sirva.

No logre armar la linterna en la forma circular para el personaje.  :(
400
Cita de: NiuWeb en Agosto 14, 2017, 03:26:37 AM
Creo que el GameMaker: Studio viene con un tutorial de ello, ahí hay un código completo de eso. Puede que te sirva.

:o Vaya GM:S tenia esta función todo el tiempo? realmente interesante, el código es grande y esta en ingles, se ve algo complicado de lo que espere desde un principio, veré como me resulta.  :), pero todavía lo tendré como pendiente.
401
Perdí información que cree hace meses, entre ellas la programación de la linterna, busque en la sección "Buscas" para ver si tenia una respuesta a esta pregunta, pero al parecer fueron borradas por una caída que tuvo el servidor, por lo que decidí empezar y retomar siguiendo unos tutoriales, sin embargo no logre armarlo de la forma que se debe, esto es lo que tengo después de muchas horas de intentos, se que el tema es muy viejo, pero es un elemento importante que forma parte del juego que estoy creando.

El sprite


obj_Jugador
evento draw:
///Creacion de la linterna
//para la apariencia de la linterna
draw_set_blend_mode(bm_add)
draw_sprite_ext(spr_Luz,0,x,y,5,5,45,c_white,0.2)
draw_sprite_ext(spr_Luz,0,x,y,1,1,0,c_white,1)
draw_set_blend_mode(bm_normal)

//para que se vea el personaje.
draw_sprite_ext(sprite_index,image_index,x,y,image_xscale,image_yscale,image_angle
,image_blend,image_alpha)

obj_Oscuridad
evento draw:
///Dibuja la oscuridad
depth = 1; //ajusto la profundidad
draw_set_color(c_black)
draw_set_alpha(1) // 1 oscuro total 0.5 poco oscuro
draw_rectangle(view_xview[0]-2,view_yview[0]-
2,view_xview[0]+view_wview,view_yview[0]+view_hview,0)
draw_set_color(c_white)
draw_set_alpha(1)
//Esto es para hacer un rectángulo negro en la view.

Lo que espero lograr:  :)
GIF de Zelda: A Link to the Past

-La oscuridad sea absoluta y nada se vea hasta ser alumbrado.
-La luz se mueva con el personaje centrado.
-La luz debe mostrar al personaje y lo que le rodea.
Básicamente se resume en el gif de arriba.

Lo que logre:  :(
GIF de una habitación del juego

Pues logre armar la linterna técnicamente, sin embargo la luz no deja ver lo que hay en su interior, se aleja del jugador, la oscuridad no oculta nada, creo que estoy muy lejos de que el código logre crear el sistema de linterna que se ve en el GIF de Zelda, o al menos el comportamiento típico de una linterna circular.   :-\

Si has llegado hasta este punto gracias por leer.  :D
402
Hola.

Mi ultimo tema de la música fue hace 2 días, pero el problema lo tengo desde el mes pasado, los detalles de mi problema los menciono en http://www.comunidadgm.org/preguntas-y-respuestas/cargar-partida-y-musica-de-fondo/ , pero como nunca encontré la solución, pensé en preguntar lo siguiente desde 0 ¿como armarían ustedes sus códigos para que cada habitación tenga música de fondo al momento de cargar la partida? saludos.
403
Mi juego se guarda con un objeto que usa la función game_save ("guardar.sav") y otro objeto que carga la partida al presionar "P" con la función game_load ("guardar.sav").

El problema:

Cada vez que cargo la partida del juego la música deja de sonar, este vuelve a activarse cuando el jugador va a otra habitación.

El código:

obj_Musica

CREATE:
global.reiniciar_musica = true;

STEP:
if( global.reiniciar_musica )
{
   event_perform( ev_other, ev_room_start );
   global.reiniciar_musica = false;
}

ROOM STAR:
///Musica de fondo
//Menu
if room=romInicio {audio_sound_gain(snd_Garage,0.9,0); //portada Dura 2:08s
                   audio_play_sound(snd_Garage,0,1);}else
if room=romHistory {audio_sound_gain(snd_Jupiter_One,0.9,0); //historia Dura 2:27s
                   audio_play_sound(snd_Jupiter_One,0,1);}else
.................100 códigos de la misma mecánica....................
if room=rom_Templo_Siniestro {audio_sound_gain(snd_Funky_Good_Time,0.7,1); // zona reto 3_3 Dura 1:47s
                   audio_play_sound(snd_Funky_Good_Time,0,1);}

ROOM END:
audio_stop_all();
404
Cita de: Clamud en Mayo 09, 2017, 04:51:58 PM
Justo antes de guardar, activa una variable que indique que la música se debe reiniciar en el siguiente step, por ejemplo:
[gml]
global.reiniciar_musica = true;
[/gml]
En el evento Step del objeto música, revisa la variable y ejecuta el código del evento Room Start si es necesario:
[gml]
if( global.reiniciar_musica )
{
   event_perform( ev_other, ev_room_start );
   global.reiniciar_musica = false;
}
[/gml]
Lo he dejado de esta forma.

obj_Musica

CREATE:
global.reiniciar_musica = true;

STEP:
if( global.reiniciar_musica )
{
   event_perform( ev_other, ev_room_start );
   global.reiniciar_musica = false;
}

ROOM STAR:
///Musica de fondo
//Menu
if room=romInicio {audio_sound_gain(snd_Garage,0.9,0); //portada Dura 2:08s
                   audio_play_sound(snd_Garage,0,1);}else
if room=romHistory {audio_sound_gain(snd_Jupiter_One,0.9,0); //historia Dura 2:27s
                   audio_play_sound(snd_Jupiter_One,0,1);}else
.................100 códigos de la misma mecánica....................
if room=rom_Templo_Siniestro {audio_sound_gain(snd_Funky_Good_Time,0.7,1); // zona reto 3_3 Dura 1:47s
                   audio_play_sound(snd_Funky_Good_Time,0,1);}

ROOM END:
audio_stop_all();

Pero la verdad no ha habido ningún cambio en el juego, es decir que cada vez que le doy a cargar inicia sin sonido hasta que valla a otra habitación  :( ¿lo arme mal?  ???.
405
Preguntas y respuestas / Borrar
Mayo 09, 2017, 04:39:55 AM
Pues resulta que mi juego se guarda con un objeto que usa la función game_save ("guardar.sav") y otro objeto que carga la partida al presionar "P" con la función game_load ("guardar.sav").

El problema:

Cada vez que cargo la partida del juego la música deja de sonar, este vuelve a activarse cuando el jugador va a otra habitación.

El código:

obj_Musica
ROOM START
///Musica de fondo
//Menu
if room=romInicio {audio_sound_gain(snd_Garage,0.9,0); //portada Dura 2:08s
                   audio_play_sound(snd_Garage,0,1);}else
if room=romHistory {audio_sound_gain(snd_Jupiter_One,0.9,0); //historia Dura 2:27s
                   audio_play_sound(snd_Jupiter_One,0,1);}else
+100 lineas de códigos con la misma mecanica..........
if room=rom_Templo_Siniestro {audio_sound_gain(snd_Funky_Good_Time,0.7,1); // zona reto 3_3 Dura 1:47s
                   audio_play_sound(snd_Funky_Good_Time,0,1);}

ROOM END
audio_stop_all();

La verdad no me molestaría tener que cambiar esto, si es que conocen una mejor forma de armar un código para iniciar la música de la habitación cuando el jugador pierda y reinicie la partida.