Comunidad Game Maker

Ayuda => Preguntas y respuestas => Mensaje iniciado por: Bird Sick Games en Mayo 23, 2021, 08:21:41 pm

Título: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 23, 2021, 08:21:41 pm
hola, estoy haciendo un videojuego en donde tienes que escapar de un asesino. lo que quiero que haga fue de que lo persiga, eso si lo logre a hacer, hasta logre hacer de que el enemigo apareciera aleatoriamente en la room, pero cuando le hice los sprites de izquierda, derecha, arriba y abajo no funcionaba, programe que si el jugador estaba arriba miraría hacia abajo y la animación iba demasiado rápido, pero no tuve ningún resultado. así que pido ayuda a ustedes, además le hice scripts

ESTO SON LOS EVENTOS DEL ENEMIGO

EVENTOS CREATE DEL ENEMIGO
 
///apareces aleatoriamente
var atorado = true;
    while(atorado){
          x = random(room_width);
          y = random(room_height);
          atorado = place_meeting(x,y , obj_parent_asesino
                                        and obj_bloque
                                        and obj_bloque_vallas
                                        and obj_muro
                                        and obj_candado
                                        and obj_candado_azul
                                        and obj_candado_rojo
                                        and obj_tablas_de_madera
                                        and obj_puerta_roja
                                        and obj_puerta_azul
                                        and obj_puerta_amarillo
                                        and obj_no_colision_perro
                                        and obj_cerca_metalica);
}

///inicializacion

enum eg{
        parado = enemigo_parado,
        corriendo = enemigo_corriendo
}

dir = "abajo";
estado = eg.parado;

EVENTOS STEPS DEL ENEMIGO

///propiedades

//avariables
depth = -y;
vv = 0;
vh = 0;
v = 1;

//direccion
if (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";

//mirar al jugador
grados = point_direction(x,y, obj_prota.x, obj_prota.y);
if (grados < 45 or grados > 315) dir = "derecha";
else if (grados >= 45 and grados < 135) dir = "arriba";
else if (grados >= 135 and grados < 225) dir = "izquierda";
else if (grados >= 225 and grados <= 315) dir = "abajo";

(https://cdn.discordapp.com/attachments/762842196533313558/846090261913796628/Sin_titulo.png)

SCRIPTS PARA ENEMIGO

script de parado
image_speed = 0;
image_index = 0;

script de corriendo
image_speed = 0.1;
if (image_index == 0) image_index++;

switch(dir){
    case "abajo":
        sprite_index = spr_enemigo_sur;
        break;
    case "arriba":
        sprite_index = spr_enemigo_norte;
        break;
    case "izquierda":
        sprite_index = spr_enemigo_oeste;
        break;
    case "derecha":
        sprite_index = spr_enemigo_este  
        break;
}

estaré muy agradecido con ustedes si me ayudan a corregir este error
Título: Re: tengo un error al hacer mi enemigo
Publicado por: dixon en Mayo 23, 2021, 10:19:10 pm
Hola, saludos.  ;)

Al parecer hay un problema con las variables vv y vh, tu código necesita que esas variables cambien de valor para determinar la dirección del enemigo, pero nunca cambiarán su valor porque las estás declarando en el evento step y no en el create.

//avariables
depth = -y;
vv = 0;
vh = 0;
v = 1;
Título: Re: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 23, 2021, 10:28:48 pm
hola amigo, ya puse esas variables en el evento create y no se ha arreglado el error    ???
Título: Re: tengo un error al hacer mi enemigo
Publicado por: dixon en Mayo 23, 2021, 10:43:01 pm
Así como las declarastes en el evento créate, deberás eliminarlas del evento step, pero solo las variables vv y vh.

Si el problema persiste deberás mostrar la otra parte del código de tu enemigo donde se indica el cambio de esas variables.

Aunque es posible que no tengas ese código porque estás esperando que exista una relación automática con el movimiento del player y las variables vv y vh pero eso no sería lo correcto.
En el caso de que quieras relacionar el movimiento del player con las variables vv y vh estas deberían obtener el valor de las variables del sistema vspeed y hspeed respectivamente.

Aunque si el movimiento del enemigo es automático quizás las variables vspeed y hspeed no reflejen movimiento, porque quizás el sistema esté usando solo la variable llamada “speed” y la variable “direction”. De ser hasí deberás establecer la relación entre la velocidad y la dirección para transformarla en valores comprensibles por la vv y vh.

Otro camino más corto sería usar la  “xprevious” y la “yprevious” para indicar la dirección del movimiento.
Tienes que darme más detalles.
Título: Re: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 23, 2021, 10:58:11 pm
muchas gracias sobre lo que me dijiste, pero se que no me explique bien, es que quería que el enemigo cambiara de sprite dependiendo del movimiento que estaba el player, si el player esta arriba el enemigo mirara arriba y así con todos los movimientos, además, ya pase los VV y VH al create y las elimine del step
Título: Re: tengo un error al hacer mi enemigo
Publicado por: dixon en Mayo 23, 2021, 11:09:34 pm
No se preocupe  :-[, más bien me he equivocado yo pero ya creo tener la respuesta.

Ya he comprobado en estos instantes que si existe relación entre las variables: speed, direction, vspeed y hspeed. Lo que significa que para solucionar el problema debes volver al tu código original que se encontraba en el evento step, y solo hacerle la siguiente modificación.

//avariables
depth = -y;
vv = vspeed;
vh = hspeed;
v = 1;
Título: Re: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 23, 2021, 11:19:55 pm
hola de nuevo, he hecho lo que usted me dijo y tampoco hubo resultado, siempre me pregunto porque estas cosas me pasan solo a mi  :'(
Título: Re: tengo un error al hacer mi enemigo
Publicado por: dixon en Mayo 23, 2021, 11:56:21 pm
Bueno, jajaja.
Encontré otros fallos en tu código, en esta zona:
 
//direccion
if (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";

//mirar al jugador
grados = point_direction(x,y, obj_prota.x, obj_prota.y);
if (grados < 45 or grados > 315) dir = "derecha";
else if (grados >= 45 and grados < 135) dir = "arriba";
else if (grados >= 135 and grados < 225) dir = "izquierda";
else if (grados >= 225 and grados <= 315) dir = "abajo";

1.   El primer grupo que se usa para hallar la dirección “//dirección” queda anulado por el segundo grupo de mirar al jugador “//mirar al jugador”. Ya que ambos están buscando establecer el valor de la variable dir pero siempre se tomará el valor que obtenga el conjunto de “//mirar al jugador”. Por lo tanto el primero conjunto no se usa y debe ser borrado.

Borrar esto:
//direccion
if (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";

2.   No uses else if, a menos que lo necesites realmente, el “else if” puede ser malinterpretado. Modifica tu código sin usar el else if.

Codigo sin else if
//mirar al jugador
grados = point_direction(x,y, obj_prota.x, obj_prota.y);
if (grados < 45 or grados > 315) dir = "derecha";
if (grados >= 45 and grados < 135) dir = "arriba";
if (grados >= 135 and grados < 225) dir = "izquierda";
if (grados >= 225 and grados <= 315) dir = "abajo";

Aquí te dejo un html5 que usa parte de tu código y funciona bien
(http://imgfz.com/i/s4zWq32.jpeg) (https://ndika3y7yuiuyd81pfplkq-on.drv.tw/www.dixonweb.dx/galeria/movimiento/)
Título: Re: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 24, 2021, 12:10:00 am
muchas gracias, pero dime donde tiene que ir cada uno, es que me revolví mucho XD
Título: Re: tengo un error al hacer mi enemigo
Publicado por: dixon en Mayo 24, 2021, 12:17:31 am
El siguiente código es tu código original sin modificación:
///propiedades

//avariables
depth = -y;
vv = 0;
vh = 0;
v = 1;

//direccion
if (vv > 0) dir = "abajo";
else if (vv < 0) dir = "arriba";
else if (vh > 0) dir = "derecha";
else if (vh < 0) dir = "izquierda";

//mirar al jugador
grados = point_direction(x,y, obj_prota.x, obj_prota.y);
if (grados < 45 or grados > 315) dir = "derecha";
else if (grados >= 45 and grados < 135) dir = "arriba";
else if (grados >= 135 and grados < 225) dir = "izquierda";
else if (grados >= 225 and grados <= 315) dir = "abajo";

Recomiendo que lo modifiques de esta manera:
///propiedades

//avariables
depth = -y;
vv = vspeed;
vh = hspeed;
v = 1;

//mirar al jugador
grados = point_direction(x,y, obj_prota.x, obj_prota.y);
if (grados < 45 or grados > 315) dir = "derecha";
if (grados >= 45 and grados < 135) dir = "arriba";
if (grados >= 135 and grados < 225) dir = "izquierda";
if (grados >= 225 and grados <= 315) dir = "abajo";
Sólo has eso, y si el problema persiste deberás explicar con más detalles el problema, por ejemplo:
1.   El enemigo no muestra las imágenes correctas.
2.   El enemigo se queda pegado a las paredes.
3.   El enemigo no se mueve.
4.   El enemigo no muestra imágenes.
5.   El enemigo no quiere seguir al player.
6.   El enemigo se mueve y luego se queda pegado a las paredes.
7.   El enemigo no se mueve en la dirección correcta.

Título: Re: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 24, 2021, 12:26:09 am
todo bien, pero lo malo es que solo mira para abajo, no muestra la imagen correcta, cuando el jugador esta huyendo a la derecha, el enemigo sigue mirando abajo, se queda igual y no cambia de la imagen
Título: Re: tengo un error al hacer mi enemigo
Publicado por: dixon en Mayo 24, 2021, 12:38:01 am
Cuando programé la versión html5 tambien me di cuenta de que las imágenes no cambiaban, es por eso que reemplacé el “else if” por “if” y todo salió bien.
Título: Re: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 24, 2021, 12:44:33 am
yo no tengo ningún else y no funciona, pueden ser tres cosas

1. las mascaras de colision y el centrado tienen algo que ver

2. o la acción de step toward point es el responsable de que pase eso

3. los scripts tienen algo que ver también
Título: Re: tengo un error al hacer mi enemigo
Publicado por: dixon en Mayo 24, 2021, 01:18:12 am
De ser así vamos a desglosar el código hasta que no quede nada de el. Jejeje.
Los datos que tu me has suministrados me indican lo siguiente:
1.   El enemigo se mueve correctamente.
2.   El enemigo sigue al player.
3.   El enemigo no se pega a las paredes.
4.   El enemigo presentó fallas luego de agregarle la función de cambiar sus sprites.
5.   El enemigo presenta la única falla de que no muestra la imagen correcta al seguir al player.
Entonces en base a esos datos que tengo (suministrados por ti y por deducción), puedo concluir que el problema no se halla realmente en el toward point, ni en las máscaras de colición, por tanto nos quedan dos alternativas: Problema en el script o problema con sprites repetidos. El problema con sprites repetidos no creo que sea (a menos que tengas varios sprites repetidos jajajaja,).
Veamos, tienes cuatro sprites:
spr_enemigo_norte;
spr_enemigo_sur;
spr_enemigo_este
spr_enemigo_oeste;

 Bueno, el objetivo es que el enemigo cambie sus sprites dependiendo de donde se encuentre el player, para esto se toma la dirección que tiene el player con respecto al enemigo y se determina la imagen a usar:
(http://imgfz.com/i/dnUQCmi.jpeg)

Las imágenes por norma general deberán tener el mismo tamaño y el mismo punto central (esto es norma general, no voy a explicar eso. ejeje). Y por ultimo estas imágenes normalmente no requieren tener precisión, por lo tanto hay que desmarcar la casilla de precisión para evitar posibles errores.
Bueno aguimos analizando y nos encontramos con el siguiente script
switch(dir){
    case "abajo":
        sprite_index = spr_enemigo_sur;
        break;
    case "arriba":
        sprite_index = spr_enemigo_norte;
        break;
    case "izquierda":
        sprite_index = spr_enemigo_oeste;
        break;
    case "derecha":
        sprite_index = spr_enemigo_este  
        break;
}

Este script es el responsable de cambiar las imágenes del player y recibe como orden una variable (tipo cadena de texto) llamada dir que hace referencia a la dirección en donde se encuentra el player.
El método empleado puede presentar la siguiente falla:
La falla consiste en que aunque el player está a la derecha, el enemigo sigue mirando hacia abajo porque el player se encuentra dentro del ángulo indicado como “sur.”
(http://imgfz.com/i/YMP4kbN.jpeg)
Si ese es el caso, repórtalo.
Entonces el código switch anterior, al parecer está tabajando muy bien, según micaso. Pero pueden presentarse fallas si las imágenes son las incorrectas o que el resultado final no sea el que el programador esperaba (caso de la imagen anterior).
Bueno basta de análisis, agrega el siguiente código en un evento draw o dibujo y dime lo que vez:
//Dibujando al player
draw_sprite(sprite_index,image_index,x,y);

//texto
dx=0;
dy=40;
txt="";
ver="txt";

if(ver!="dir"){draw_text(dx,dy,"dir: "+string(dir));dy+=20;if(dy>room_height-20){dy=0;dx+=room_width/2}}

if(ver!="txt"){draw_text(dx,dy,"txt: "+string(txt));dy+=20;if(dy>room_height-20){dy=0;dx+=room_width/2}}
En la pantalla aparecerá la variable dir reflejada y debes indicar si esta cambia correctamente según la posición del player.
Título: Re: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 24, 2021, 01:27:27 am
no funciona, por que me pasan estas cosas a mi  :'( ya de que sirve, mejor no te quiero seguir molestando
Título: Re: tengo un error al hacer mi enemigo
Publicado por: dixon en Mayo 24, 2021, 01:32:18 am
Jajajaja, no te preocupes.

Creo que era más fácil que me pasaras un editable jejejeje., pero no tengo game maker studio disponible, solo tengo una pc vieja que no sé si valla a soportarlo.

Estoy en tu web
https://bird-sick-games.blogspot.com/
Título: Re: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 24, 2021, 01:35:49 am
ok, te pasare un editable
Título: Re: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 24, 2021, 01:42:21 am
aqui esta
Título: Re: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 24, 2021, 01:43:46 am
Jajajaja, no te preocupes.

Creo que era más fácil que me pasaras un editable jejejeje., pero no tengo game maker studio disponible, solo tengo una pc vieja que no sé si valla a soportarlo.

Estoy en tu web
https://bird-sick-games.blogspot.com/


aqui esta el editable
Título: Re: tengo un error al hacer mi enemigo
Publicado por: dixon en Mayo 24, 2021, 01:54:43 am
Creo que no puedo abrirlo, estoy usando game maker html5, no puedo usar studio y solo puedo abrir .gmk y .gmz
Título: Re: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 24, 2021, 01:59:26 am
puedes usar este tutorial para descargártelo https://www.youtube.com/watch?v=KR2iSDlxtOg&t=62s (https://www.youtube.com/watch?v=KR2iSDlxtOg&t=62s)
Título: Re: tengo un error al hacer mi enemigo
Publicado por: dixon en Mayo 24, 2021, 02:03:35 am
Aunque me lo descargue no creo que pueda, la pc es muy vieja, necesito una pc nueva, jejeje. Nisiquiera puede ejecutar programas de game maker 8.

Pero solo puedo ver juegos exportados a html5.

Si puedes, exporta tu proyecto a html5 y me lo pasas para ver la falla. Aunque exportar a html5 habeces presenta errores, bueno casi siempre. Si quieres lo intentas.

Título: Re: tengo un error al hacer mi enemigo
Publicado por: Bird Sick Games en Mayo 24, 2021, 02:20:10 am
disculpa, pero como se hace eso?
Título: Re: tengo un error al hacer mi enemigo
Publicado por: dixon en Mayo 24, 2021, 02:27:02 am
Mira el siguiente video y adelantalo a la parte donde exporte a html5, luego me envias el archivo.

https://www.youtube.com/watch?v=cQlOdbtt5nI
Título: Re: tengo un error al hacer mi enemigo
Publicado por: dixon en Mayo 24, 2021, 10:15:58 pm
Hola, saludos.

Para exportar a html5 tienes que hacer lo siguiente:
1.   Cambiar el target a html5.
2.   Crear aplicación, se va a crear una carpeta que contrendrá la versión de tu juego para html5.

Imagen explicativa:
(http://imgfz.com/i/d6PTI2O.jpeg)
No me lo preguntastes pero, para subir tu juego “html5” a internet para que todo el mundo lo juegue de manera inmediata sin ads en un espacio libre tienes que hacer lo siguiente:
1.   Habre tu google drive.
2.   Crea una carpeta en google drive activándole todos los permisos de usuario. (botón derechom, buscar en propiedades o configuración cualquier cosa que diga permisos y decirle que si a todo)
3.   Pega en esa carpeta la carpeta de tu juego “ya exportado a html5”.
4.   Ve a drv.tw.
5.   Inicia sesión de google en drive.tw
6.   Concedele los permisos
7.   Sigue los pasos
8.   Aparecerá el link de tu juego el cual podrás abrir desde cualquier dispositivo.

Ahora bien, el archivo de tu juego que me enviaste no puede abrir porque solo copiastes un archivo perteneciente a la carpeta de proyectos.
Para poder enviar un proyecto de una persona a otra, tienes que exportar tu proyecto, entrando en file y en exportar proyecto. El archivo resultante si lo podrás compartir.
(http://imgfz.com/i/vkhCN7H.jpeg)
Advertencias:
No envíes tus proyectos públicamente a menos que no te importe si otro lo toma,  lo modifica y se haga famoso con tu trabajo, gane millones y nadie se entere que fuiste tú que lo creastes, entonces digas algún día : “yo fui el que creó ese juego tan famoso”, pero nadie te crea. Ese es mi caso con Minecraft.
Jajaja no, no es cierto. Pero si intentaba crear algo como minecraft mucho antes que saliera el juego.