Hace una hora que estube buscando algun tutorial de sistema de guardado para mi juego (todavia no lo voy a usar por que el proyecto esta en prototipo) y recien me encuentro con este tutorial nuevo
Realmente eres toda una inspiración para muchos genio!, yo no creía poder siquiera pasar de hacer un menú y ahora he terminado mi primer prototipo de mini juego funcional y para móviles y PC , Sigue asi
INCREIBLE tutorial que sirvió bastante!!! :D, Estoy intentado hacer que haya varios slots en donde puedas guardar y cargar el juego y también puedas borrar los datos de una partida y tal, este es el tutorial perfecto de guardado en Godot 4.x !!, Gracias te mereces mi like!!
Yo hice mi propio sistema de guardado y es casi igual al del video, es que los tutoriales que habían eran muy complejos para mi juego, asi que agarre fragmentos de códigos y con eso hice el mio, lo que se me dificultó fue pasar de json a diccionario, o era al revés. total, indagué y encontré el metodo parse_json (godot 3.5). buen tuto
A la espera del siguiente video con muchas ansias de verlo, justamente la semana pasada le implemente un sistema de guardado a mi juego, pero seguramente lo ate con alambre. Pero como siempre digo, si funciona no lo mires mas! xD Esto video me ayudara a mejorar, vamos por mas!
Mil gracias!!! 😁 pues curiosamente esto es de las primeras cosas que aprendí cuando estuve testeando Godot 4 en fase beta jajaja de las primeras cosas que tuve que adaptar en Leedeo Backrooms, pero como no había hecho el curso de introducción me estaba reservando estas cositas para este momento que es cuando ya tenemos todos asentada la nueva versión 😁
ESE METODO ES MUCHO MEJOR AL ANTERIOR!!! Ya prácticamente se optimizo y redujo la cantidad de código a diferencia del anterior. Y este prácticamente no tiene ese error al cargar escenas por el cual muchos cayeron al server XD. Y me parece mejor al método que yo tengo que es prácticamente una versión mas simple del de godot 3.
si jajaja te dije, básicamente son 3 líneas por función y se puede traducir en "1. Indicar archivo y operación (lectura o escritura), 2. Indicar que hacer con ese archivo (guardar en el unos datos, o cargar de él sus datos) y 3. Cerrar el archivo", es todo 😝 ahora ya no hay que estar haciendo conjuros para encriptar, solo hay que trabajar con un diccionario que podemos modificar sin alterar el código del sistema, y listo, simplificado al máximo 🤣
Tengo una pregunta, como podria hacer para que el que es jugando, pueda borrar los archivos de guardado dentro del juego? O si podrias hacer un tutorial de guardado por slots. Eso me ayudaria bastante creo en rl juego en el que estoy trabajando. A mi me da igual en realidad, si me respondes la primera me va bien, si haces lo segundo mejor. xD
Espero te haya sido de ayuda!! 😁 y es más sencillo que en Godot 3, mucho más... tú debes haber visto el primer tutorial si no me equivoco, y muchos no conseguían hacer que funcionase, por una razón u otra, así fuera una letra pero con algo terminaban liándose, y luego estaba el tema que querían encriptar el archivo, que me parece lógico encriptar este archivo, pero me parece absolutamente innecesario estar batallando para encriptar un juego entero solo para hacer eso, cuando solo va a empeorar el rendimiento del mismo únicamente para molestar un poco a los que quieran hackear los assets, y digo un poco por qué incluso encriptado no es precisamente complejo hackear assets encriptados, ya existen programas que lo hacen a golpe de clic... En Godot 4 como se puede ver se simplificó al máximo e incluso ya viene encriptado el archivo sin necesidad de hacer nada adicional, eso me encanto la verdad, aunque también me encanto como resolvieron el tema de las pantallas de carga, igual creo que lo simplificaron muchísimo.
También tenía un proyecto medio abandonado y mira, sigo con el jajaja asi que siempre es buen momento para continuar algo que nos apasiona, y más si es aprendiendo e implementando cosas chulas. 👍
Espero te haya sido de ayuda!! Este método es mucho más sencillo que el método que mostré en Godot 3, pero bueno, eso se debe principalmente a los cambios que sufrió GDscript 2.0 en la transición a Godot 4. 👍
Hace unos meses en godot 3 hice un programita que me ayudaba con una tarea, el caso es que se perdió el ejecutable y abrí el proyecto en godot 4, me daba error en el sistema de guardado, ya que han cambiado cosas, luego de un rato buscando, lo resolví jejej, este video me hubiera ahorrado un tiempo de búsqueda 😂😂😂.
Sí, fue de las primeras cosas que tuve que aprender 🤣 cuando estuve testeando la fase beta, lo hice con Leedeo Backrooms, entonces había 3 cosas que sufrieron cambios radicales y me toco investigar: El pathfinding, la pantalla de carga, y el sistema de guardado. De esos 3 ya he tratado la pantalla de carga y el sistema de guardado, lo del pathfinding también lo tengo pendiente. 👍
@@Leedeo 🤣🤣, también cambio la Curve, recuerdo seguir un tuto y varios de sus métodos cambiaron. No he visto el video de pantalla de carga o si, no recuerdo, el caso es que los últimos meses no he tenido mucho tiempo y cuando veo un video interesante lo agrego a una lista de youtube para verlo cuando tenga el tiempo de practicarlo. Estaba aprendiendo a usar Resource, es algo muy interesante, pero en fin bro saludos!
Hola javo, te queria comentar una idea para una serie de videos que si quieres podrias usar, y de hecho , nose si ya lo habias hecho en el pasado, yo hice todos los tutoriales que hay hasta ahora de hagamos videojuegos, pero me gustaria ver video en un formato mas corto, sobre en vez de videojuegos enteros, mecanicas , por ejemplo el dash , doble salto o cosas asi, o como utilizar particulas, cosas no tan grandes como un juego entero, pero que nos puedan ayudar si lo necesitamos y que den espacio a que entendamos algunos conceptos, ya que no hay muchos tutoriales sobre esto en godot 4
ayuda godot por alguna razón no detecta la funcion start() de los nodos Timer quiero que cuando ocurra tal cosa se inicie el nodo pero godot no detecta la funcion y no me sale en el autocompletado y tampoco da mensaje de error lo que significa que el código está bien si alguien me puede decir que pasa se lo agradecería mucho o si a alguien mas le ocurre díganmelo para saber que no soy el único con este problema
El autocompletado puede fallar en ocasiones, especialmente en la versión 4.2.X tal parece, pero eso no quiere decir que no funcione, si pones la función start() funcionará sin problemas, ante la duda siempre revisen la documentación docs.godotengine.org/en/stable/classes/class_timer.html si se acostumbran a revisarla aprenderán mucho. 👍
Un sistema de guardado 2.0? Lo hizo javo?, es el de la documentación?, no lo sabemos... Lo que si sabemos es que le gane por primera vez A godot man en worms 🙀
Nah, meh, todo es de la documentación, para que negarlo jajaja no soy tan listo como para inventarme así algoritmos complejos sacados de la nada 🤣, pero al menos ahora es supersencillo, porque la vez pasada, que de hecho yo traduje esa parte de la documentación al completo en Godot 3, era muchísimo más tediosa... me costó mucho entenderla para poder traducir... y ya tenía tiempo que quería hacer este tutorial, fue de las primeras cosas que aprendí cuando migre a Godot 4 en la fase beta, pero antes de ponerme con esta clase de tutoriales era más importante el curso de introducción y asentar los conocimientos con tutoriales prácticos...
Gracias por el contenido! Cómo hago para hacer habilidades tipo dash en la que seleccione la dirección del personaje que se va a desplazar? cómo funcionaría la lógica de este tipo de acciones?
En el primer curso de Hagamos Videojuegos en Godot 3 hice un tutorial sobre Dash ruclips.net/video/vrcA0SrtSRI/видео.htmlsi=S4C-yM0PP-ybJhUn la lógica aún sirve, el código igual hay que adaptarlo, pero básicamente depende del dash porque hay varios tipos de dash. El dash es como un salto, se aplica un impulso al presionar una tecla, solo que en otro eje de movimiento, pero hay dash que durante determinados frames te dan invulnerabilidad, que eso se puede hacer desde el AnimationPlayer llamando a una variable o función en determinado frame, y cambiándola nuevamente más adelante, también enseñe como llamar funciones desde el AnimationPlayer en el curso de introducción a Godot 4. En el caso de un juego 3D podría no ser necesario hacer esto usando simplemente las formas de colisión, como sucede en Dark Souls, que las animaciones están milimétricamente calculadas, pero en un juego 2D no es tan común cambiar las formas de colisión. Sí es un plataformas 2D y el dash requiere que mientras que este dasheando el personaje flote en el aire, entonces a la variable que empuja al personaje hacia abajo se le puede dar un valor igual a 0 para que flote mientras dure, y ya sea con una animación que enve la señal animation_finshed o con un timer, volver a darle una fuerza de gravedad cuando acabe. Barridos, rodar... todos son dash, y la base del dash es el impulso igual que en el salto, lo que va a diferenciar el tipo de dash es el efecto que tenga dependiendo de lo que queramos conseguir.
Jajaja mil gracias, pero espero lo veas y te sea de ayuda!!! 😁 me gusta saber que aporte algo antes de ganarme la suscripción, aunque igualmente no me quejo por la confianza vaya jajaja
A mi me pasa que al intentar agregar un nuevo valor al diccionario después de ya tener un partida guardada, genera errores como que no encuentra ese valor en el diccionario o cosas así, es decir, no se guarda el nuevo valor agregado al diccionario. Gracias por el video!!
Eso pasa porque estás intentando acceder a un diccionario del que no obtienes adecuadamente su referencia. En los autoload, pues siempre va a ser accediendo al autoload desde cualquier otro script, esa parte no tiene mayor misterio sabiendo como funcionan, y desde otro script, o bien guarda directamente valores de ese mismo nodo, o bien se guarda la referencia de los nodos que contengan los valores deseados para pasárselos al autoload. En cualquier caso el secreto siempre es una adecuada estructura y dominar bien el "sistema de responsabilidades" que mencione en el tutorial de GDScript, es la clase de cosas que se suelen pasar por alto porque no parecen relevantes, o quizás suenan demasiado simples para prestarles atención, pero que en realidad son de vital importancia. 👍
Como hacer que cuando el juego se inicie el personaje aparezca en la posicion que yo quiera, con codigo en godot 4, o sea en un juego rpg al entrar en una puerta quiero que aparezcan en la escena de la casa en la posicion de entrada, y al salir de la casa quiero que aparezcan en cierta posición, y que se implemente por ejemplo si una casa tiene dos puertas.
Pero eso es independiente al sistema de guardado. Puedes crear puntos de referencia para guardar la posición en un autoload e igualar la posición del player a la posición guardada en el autoload, o en el script de los puntos de traslado crear un export para colocar ahí la posición del player en la siguiente escena... hay muchas formas, pero tienen que pensar, darle vueltas, fallar y volver a probar, es importante que aprendan a solucionar problemas sencillos como este por cuenta propia. No hace falta que sean las soluciones más elegantes, pero hagan que funcione.
Puedes explicar como guardamos las puntuacion en un servidor para evitar que sean manipuladas , tanto con la tabla de clasificación, asi al momento de hacer juegos NFT , los jugadores no puedan manipular nada de lo que este en el servidor
Que sería un tema aparte porque en realidad el método de guardar/cargar partida sería igual, solo que en lugar de acceder a la información local, sería acceder a un servidor y recuperar esa información en línea. Vamos que si hiciera un tutorial enseñando como trabajar con servidores, lo podrías complementar con este tutorial. No lo hice hasta ahora porque ese tutorial requeriría pues un servidor de pruebas, pero si puedo solucionar eso, con gusto lo hago. 👍
genial, justo queria implementar un save/load en un pequeño juego que estoy desarrollando. Una duda, para el caso save_file = null seria lo mismo que hacer un save_file.close() ??
Una pregunta mi querido leedeo, en caso de que tenga mas de una variable para guardar es decir game_data_1 y game_data_2, el metodo es el mismo para guardarlo o debo hacerlo por separado en otra ruta?
Se pueden crear tantos diccionarios como uno quisiera de la misma forma, y en lugar de cargar automáticamente uno, puedes crear un selector de partidas, y que dependiendo cual se eligiese, cargase el 1, el 2, o el 3 (o los que uno quiera poner), y al momento de guardar, seleccionases igual en que diccionario se guarda (o slot, que es lo mismo, pero dicho de forma que el jugador lo entienda). Hay que hacer algunos cambios, obviamente, pero nada especialmente complejo, incluso se podría usar un diccionario multidimensional en lugar de crear varios diccionarios, el resultado sería el mismo pero quizas haya personas que lo vean mas sencillo/legible hacerlo de esta forma. Actualmente no se hace tanto esa práctica porque ya se ha normalizado mucho tener una sola partida, y realmente soy partidario de ese formato, ya que no vale la pena complicarse, a veces cuánto más sencillo sea algo, mejor, no sólo para el desarrollador, sino también para el jugador. Por eso es que desaparecieron mecánicas como los sistemas de vidas, que realmente solo tenían sentido en un arcade donde se pagaba por esas vidas, pero vamos que todavía se crean juegos que siguen el formato clásico de tener varias partidas, y lo hacen así.
Hola, Ledeo. Me encantan tus videos. He aprendido un montón con ellos. Una pregunta: al utilizar la ruta "user://", ¿sólo podría cargarse la partida en la misma sesión o sería posible cargarla incluso después de que el usuario cierre y abra la aplicación en Android?
Es una ruta física, solo que no es una ruta literal porque cada usuario tendrá una ruta distinta dependiendo del SO, nombre de usuario, etc. eso significa que se guarda un archivo en esa ruta, y siempre que se haya implementado adecuadamente el sistema de guardado, y funcione correctamente, el usuario puede guardar y cargar partida sin importar si cierra la app y la abre nuevamente, para eso es el sistema de guardado. 👍
Bueno, eso si no te puedo decir, no he subido ningún juego a Steam, pero aunque lo hiciera, por contrato no podría relevar ningún tipo de información interna incluso aunque sea para ayudar a terceros, pues se considera filtraciones de las que podría aprovecharse la competencia, así que realmente la única forma de averiguarlo es hacerlo y una vez hecho, contactar con el soporte técnico e investigar por cuenta propia. 😅
hola amigo si aprendo el contenido de este video crees que me servira para guardar partidas completas e visto que algunos juegos pueden guardar partidas completas para los jugadores
Sirve para guardar partidas, como digo en el tutorial, al momento de crear el juego, tenemos que saber como estructurarlo para saber que valores deseamos guardar, y eso es algo que cambia por completo de proyecto a proyecto. Si lo que te refieres con partidas completas es a guardar el estado del juego como hace un emulador, no, no se puede y como digo, ni siquiera investiguen como hacer eso, porque aunque exista un procedimiento no es recomendable, guardando unos pocos valores es más que suficiente. Pero eso es importante saber estructurar bien un proyecto, aquí es donde cobra sentido el saber programar adecuadamente para que el código sea escalable, y para eso no hay que ser un genio, pero sí hay que ser constante y ganar experiencia. Si lo intenta hacer alguien sin saber programación básica, o no le va a salir en el peor de los casos, o si le sale, va a hacer un hermoso desastre, y eso el jugador promedio no lo perdona.
@@Leedeo cuando digo guardar partidas me refiero a como en el juego de minecraf que uno guarda el mundo que se creo para despues ir armando tu casa despues guardas la partida otro dia seguis construyendo y agrandas tu casa cosas asi mas que nada es possible hacer eso o es muy complejo
@@gon_teseira Se puede, pero Minecraft es precisamente un juego muy bien estructurado y optimizado. Los mundos funcionan por chunks y cada chunk es un array o diccionario conformado por distintos tipos de cubos, así que al guardar partida se almacenan los estados de estos arrays/diccionarios anidados. En realidad es un solo valor con miles y miles de valores anidados, pero el sistema de guardado solo guarda el array/diccionario “padre”, que es el mundo. Esa es la teoría, puesto en palabras suena fácil ¿Pero es fácil llevarlo a la práctica? No, por eso Minecraft tiene mérito, nadie que no tenga una experiencia brutal va a conseguir hacer un sistema de guardado como el de Minecraft, y está bien, porque alguien sin experiencia ni siquiera tendría porque aspirar a hacer un juego como Minecraft, siempre se ha de hacer juegos que sean acordes a nuestro nivel de experiencia y un poco más, ese extra es el que hace que en el siguiente proyecto seamos un poco mejores, pero si queremos pasar de 0 a 100... es desastre asegurado.
Me ayudo mucho para lo que estoy trabajando de guardar la informacion de mis partidas actuales, muchas gracias Nomas me causa dos dudas, 1: si genero un exe y lo paso a otra computadora que no tiene godot instalado, ¿donde se crearia el archivo para guardar la informacion? 2: En caso de subir el proyecto a steam, al momento de que alguien se descargarse el juego ¿el mismo steam se encargaria de crear la carpeta para estas acciones?
No hace falta tener Godot en el equipo, al generar el ejecutable, a todos los efectos es un software independiente compilado en Godot, y se ejecutará en ese equipo. La ruta donde se guarda se genera de forma automática dentro de la carpeta de usuario de la persona, que difiere del nombre de usuario y del SO, y ese procedimiento es el mismo si se sube a Steam, no hay cambios ni hay que tocar nada más. Si tú quieres saber donde se encuentra concretamente tu carpeta de usuario, desde el mismo Godot vas a Proyecto > Abrir Carpeta de Datos del Usuario, pero eso es para ti, para testeo, no es necesario que le indiques a nadie esa ruta.
Un tutorial de verdad de mundo abierto como el de German Coronel!! 🤣, pero si me llevo con German y no hizo ningún tutorial de mundo abierto 3D, y el juego que está haciendo tampoco es de mundo abierto, va por niveles, eso más que un tutorial sería una maestría 😝
¿Se podría guardar un TranslationServer en un diccionario? Me gustaría poder guardar esto: func _on_espanol_button_down(): TranslationServer.set_locale("es") pass
func _on_ingles_button_down(): TranslationServer.set_locale("en") pass Para que así el juego memorice en qué idioma quiero que aparezcan las cosas. Muchas gracias!
Se puede hacer perfectamente, por ejemplo: var options : Dictionary = { "language" : { "es" : TranslationServer.set_locale("es"), "en" : TranslationServer.set_locale("en") }, } En este ejemplo hice un diccionario multidimensional para guardar los 2 valores dentro del valor language, ya para acceder a un valor u otro, pues sería options[language][es] o options[language][en] 👍
Jajaja mil gracias!!! Aunque espero que lo hayas visto y te haya sido de ayuda, que también me gusta ser de utilidad 😝 yo creo que sí, porque es un buen método, la verdad.
Tan malo es el metodo de guardar como los emuladores? Eso explica por qué el hack rom de Pokemon que descargué de chico de la nada empezó a pesar 1GB. La verdad que me interesó bastante descubrir eso
Para rendimiento sí, para un emulador puedo entenderlo porque hay juegos clásicos que no tienen puntos de guardado y eso puede ser una forma de hacerte el paro, pero en juegos actuales es inaceptable por completo. Imagínate en Godot, si una escena está conformada por 10 nodos y cada nodo tiene no sé, pongamos 50 parámetros significa que esa escena guardaría 550 datos (sí, porque sumando la escena padre, son 11 nodos en total 😝), y se puede tratar de una planta que adorna una mesa que ni siquiera se mueve jamás y solo ves 5 segundos durante el juego y jamás necesitas volverla a ver, pero ese método no tiene forma de decir "si es una maceta que jamás se mueve y solo ves 5 segundos, no guardes sus datos", porque guardar estado significa que guarda el estado literalmente, vamos que guarda todo por igual, tanto los valores de lo que queremos guardar, como los valores de lo que no. Por eso lo correcto siempre va a ser elegir uno por uno los datos a guardar, porque podemos pasar de 1 millón de datos, a 10, 20, 30 o 40... el secreto es saber organizarse, y en realidad no es que sea algo tan complejo, simplemente hay que pensar un poco y hacer un listado con los valores que uno necesita guardar, hasta sirve para que uno conozca mejor su juego, porque especialmente cuando uno empieza en esto pasa que muchos hacen el juego, pero desconocen realmente lo que están haciendo, y si lo desconocen ellos, más lo va a desconocer cualquier otro. 🤣
Tengo un tutorial para Godot 3 ruclips.net/video/Ti_gXTfaNro/видео.html en realidad hay muchos tutoriales de Godot 3 en el canal, se pueden acceder desde las listas de reproducción. Respeto a lo de usar una función nativa de una versión superior, recomendaría que no te molestes, es mejor no perder el tiempo con esas cosas. Cada software tiene sus particularidades, y cada versión de dicho software también puede tener las suyas propias, entonces lo mejor es no complicarse y usar las características/metodologías del software que estamos usando en ese momento, aunque por supuesto sirve entender el funcionamiento sin importar la versión (la lógica de programación, por eso es que pongo mucho énfasis en las explicaciones) para poder saltar de versiones, y poder adaptarse a nuevas metodologías más rápidamente, pues finalmente la lógica suele ser la misma, y entendiendo bien las cosas también podemos entender si llegase haber cambios.
Igual, es lo mismo en Windows, MacOS, iOS o Android, se le da la indicación a Godot de guardarlo en la carpeta de usuario y automáticamente la detecta, sino imagínate, sería imposible saber la ruta donde guardar porque cada persona tiene un nombre de usuario distinto.
hasta apenas vi porque ya son muchos comentarios y estoy solo en el canal 😅 pero es dat. PD: Si la gente lee los comentarios y ven preguntas como estás que sepan las respuestas, por favor respondan, así se pueden ayudar entre ustedes y de paso me ayudan a mi, que me gustaría responder todo, pero ya me resulta complicado. 😅
Hace una hora que estube buscando algun tutorial de sistema de guardado para mi juego (todavia no lo voy a usar por que el proyecto esta en prototipo) y recien me encuentro con este tutorial nuevo
Entonces lo publiqué en buen momento!! espero te haya sido de ayuda!! 😁
Realmente eres toda una inspiración para muchos genio!, yo no creía poder siquiera pasar de hacer un menú y ahora he terminado mi primer prototipo de mini juego funcional y para móviles y PC , Sigue asi
INCREIBLE tutorial que sirvió bastante!!! :D, Estoy intentado hacer que haya varios slots en donde puedas guardar y cargar el juego y también puedas borrar los datos de una partida y tal, este es el tutorial perfecto de guardado en Godot 4.x !!, Gracias te mereces mi like!!
Perfecto muchas gracias algo muy sencillo y practico y muy buen profesor sigue así amigo nos ayudas mucho.
Es un honor!! mil gracias por tus palabras!! 😁
Yo hice mi propio sistema de guardado y es casi igual al del video, es que los tutoriales que habían eran muy complejos para mi juego, asi que agarre fragmentos de códigos y con eso hice el mio, lo que se me dificultó fue pasar de json a diccionario, o era al revés. total, indagué y encontré el metodo parse_json (godot 3.5). buen tuto
A la espera del siguiente video con muchas ansias de verlo, justamente la semana pasada le implemente un sistema de guardado a mi juego, pero seguramente lo ate con alambre.
Pero como siempre digo, si funciona no lo mires mas! xD
Esto video me ayudara a mejorar, vamos por mas!
Mil gracias!!! 😁 pues curiosamente esto es de las primeras cosas que aprendí cuando estuve testeando Godot 4 en fase beta jajaja de las primeras cosas que tuve que adaptar en Leedeo Backrooms, pero como no había hecho el curso de introducción me estaba reservando estas cositas para este momento que es cuando ya tenemos todos asentada la nueva versión 😁
Por fin video nuevo, que epicidad
Mil gracias!!! Espero te haya sido de ayuda!!! 😁👍
sos una belleza de persona!
ESE METODO ES MUCHO MEJOR AL ANTERIOR!!! Ya prácticamente se optimizo y redujo la cantidad de código a diferencia del anterior. Y este prácticamente no tiene ese error al cargar escenas por el cual muchos cayeron al server XD. Y me parece mejor al método que yo tengo que es prácticamente una versión mas simple del de godot 3.
si jajaja te dije, básicamente son 3 líneas por función y se puede traducir en "1. Indicar archivo y operación (lectura o escritura), 2. Indicar que hacer con ese archivo (guardar en el unos datos, o cargar de él sus datos) y 3. Cerrar el archivo", es todo 😝 ahora ya no hay que estar haciendo conjuros para encriptar, solo hay que trabajar con un diccionario que podemos modificar sin alterar el código del sistema, y listo, simplificado al máximo 🤣
Excelente! Muy buen video compadre!!
Mil gracias!!! espero te haya sido de ayuda en tu proyecto o futuros proyectos!! 😁👍
Tengo una pregunta, como podria hacer para que el que es jugando, pueda borrar los archivos de guardado dentro del juego? O si podrias hacer un tutorial de guardado por slots. Eso me ayudaria bastante creo en rl juego en el que estoy trabajando. A mi me da igual en realidad, si me respondes la primera me va bien, si haces lo segundo mejor. xD
Buen tutorial, muy importante el sistema de guardado en todo juego 😎.
Espero te haya sido de ayuda!! 😁 y es más sencillo que en Godot 3, mucho más... tú debes haber visto el primer tutorial si no me equivoco, y muchos no conseguían hacer que funcionase, por una razón u otra, así fuera una letra pero con algo terminaban liándose, y luego estaba el tema que querían encriptar el archivo, que me parece lógico encriptar este archivo, pero me parece absolutamente innecesario estar batallando para encriptar un juego entero solo para hacer eso, cuando solo va a empeorar el rendimiento del mismo únicamente para molestar un poco a los que quieran hackear los assets, y digo un poco por qué incluso encriptado no es precisamente complejo hackear assets encriptados, ya existen programas que lo hacen a golpe de clic...
En Godot 4 como se puede ver se simplificó al máximo e incluso ya viene encriptado el archivo sin necesidad de hacer nada adicional, eso me encanto la verdad, aunque también me encanto como resolvieron el tema de las pantallas de carga, igual creo que lo simplificaron muchísimo.
Graciaaaaaaaaas, creo que volveré con el proyecto que tengo abandonado jajajaj
También tenía un proyecto medio abandonado y mira, sigo con el jajaja asi que siempre es buen momento para continuar algo que nos apasiona, y más si es aprendiendo e implementando cosas chulas. 👍
Con esto ya tendré que idearmelas para un Metroidvania
😢Por fin este tutorial lo estaba buscando pero ninguno me funcionaba espero este me funcione
Espero te haya sido de ayuda!! Este método es mucho más sencillo que el método que mostré en Godot 3, pero bueno, eso se debe principalmente a los cambios que sufrió GDscript 2.0 en la transición a Godot 4. 👍
Hace unos meses en godot 3 hice un programita que me ayudaba con una tarea, el caso es que se perdió el ejecutable y abrí el proyecto en godot 4, me daba error en el sistema de guardado, ya que han cambiado cosas, luego de un rato buscando, lo resolví jejej, este video me hubiera ahorrado un tiempo de búsqueda 😂😂😂.
Sí, fue de las primeras cosas que tuve que aprender 🤣 cuando estuve testeando la fase beta, lo hice con Leedeo Backrooms, entonces había 3 cosas que sufrieron cambios radicales y me toco investigar: El pathfinding, la pantalla de carga, y el sistema de guardado.
De esos 3 ya he tratado la pantalla de carga y el sistema de guardado, lo del pathfinding también lo tengo pendiente. 👍
@@Leedeo 🤣🤣, también cambio la Curve, recuerdo seguir un tuto y varios de sus métodos cambiaron.
No he visto el video de pantalla de carga o si, no recuerdo, el caso es que los últimos meses no he tenido mucho tiempo y cuando veo un video interesante lo agrego a una lista de youtube para verlo cuando tenga el tiempo de practicarlo.
Estaba aprendiendo a usar Resource, es algo muy interesante, pero en fin bro saludos!
eso, guardado de datos mola...
hola 6:20 porque no me reconoce el player en el codigo
¿Copiaste ese ejemplo? Te falto entonces darle el nombre de clase al Player, ya que en esa línea estoy preguntando si su nombre de clase es Player.
@@Leedeo ok gracias
Hola javo, te queria comentar una idea para una serie de videos que si quieres podrias usar, y de hecho , nose si ya lo habias hecho en el pasado, yo hice todos los tutoriales que hay hasta ahora de hagamos videojuegos, pero me gustaria ver video en un formato mas corto, sobre en vez de videojuegos enteros, mecanicas , por ejemplo el dash , doble salto o cosas asi, o como utilizar particulas, cosas no tan grandes como un juego entero, pero que nos puedan ayudar si lo necesitamos y que den espacio a que entendamos algunos conceptos, ya que no hay muchos tutoriales sobre esto en godot 4
Muchas gracias por otra gran video de godot engine. Pronto seras vendecido por la espada de los dioses Espartano jaja
ayuda godot por alguna razón no detecta la funcion start() de los nodos Timer
quiero que cuando ocurra tal cosa se inicie el nodo pero godot no detecta la funcion y no me sale en el autocompletado y tampoco da mensaje de error lo que significa que el código está bien
si alguien me puede decir que pasa se lo agradecería mucho o si a alguien mas le ocurre díganmelo para saber que no soy el único con este problema
El autocompletado puede fallar en ocasiones, especialmente en la versión 4.2.X tal parece, pero eso no quiere decir que no funcione, si pones la función start() funcionará sin problemas, ante la duda siempre revisen la documentación docs.godotengine.org/en/stable/classes/class_timer.html si se acostumbran a revisarla aprenderán mucho. 👍
Un sistema de guardado 2.0? Lo hizo javo?, es el de la documentación?, no lo sabemos... Lo que si sabemos es que le gane por primera vez A godot man en worms 🙀
Nah, meh, todo es de la documentación, para que negarlo jajaja no soy tan listo como para inventarme así algoritmos complejos sacados de la nada 🤣, pero al menos ahora es supersencillo, porque la vez pasada, que de hecho yo traduje esa parte de la documentación al completo en Godot 3, era muchísimo más tediosa... me costó mucho entenderla para poder traducir... y ya tenía tiempo que quería hacer este tutorial, fue de las primeras cosas que aprendí cuando migre a Godot 4 en la fase beta, pero antes de ponerme con esta clase de tutoriales era más importante el curso de introducción y asentar los conocimientos con tutoriales prácticos...
Gracias por el contenido! Cómo hago para hacer habilidades tipo dash en la que seleccione la dirección del personaje que se va a desplazar? cómo funcionaría la lógica de este tipo de acciones?
En el primer curso de Hagamos Videojuegos en Godot 3 hice un tutorial sobre Dash ruclips.net/video/vrcA0SrtSRI/видео.htmlsi=S4C-yM0PP-ybJhUn la lógica aún sirve, el código igual hay que adaptarlo, pero básicamente depende del dash porque hay varios tipos de dash.
El dash es como un salto, se aplica un impulso al presionar una tecla, solo que en otro eje de movimiento, pero hay dash que durante determinados frames te dan invulnerabilidad, que eso se puede hacer desde el AnimationPlayer llamando a una variable o función en determinado frame, y cambiándola nuevamente más adelante, también enseñe como llamar funciones desde el AnimationPlayer en el curso de introducción a Godot 4. En el caso de un juego 3D podría no ser necesario hacer esto usando simplemente las formas de colisión, como sucede en Dark Souls, que las animaciones están milimétricamente calculadas, pero en un juego 2D no es tan común cambiar las formas de colisión.
Sí es un plataformas 2D y el dash requiere que mientras que este dasheando el personaje flote en el aire, entonces a la variable que empuja al personaje hacia abajo se le puede dar un valor igual a 0 para que flote mientras dure, y ya sea con una animación que enve la señal animation_finshed o con un timer, volver a darle una fuerza de gravedad cuando acabe.
Barridos, rodar... todos son dash, y la base del dash es el impulso igual que en el salto, lo que va a diferenciar el tipo de dash es el efecto que tenga dependiendo de lo que queramos conseguir.
No lo he visto, pero se que sera un buen tutorial: *se suscribe con sus 3 cuentas*
Jajaja mil gracias, pero espero lo veas y te sea de ayuda!!! 😁 me gusta saber que aporte algo antes de ganarme la suscripción, aunque igualmente no me quejo por la confianza vaya jajaja
A mi me pasa que al intentar agregar un nuevo valor al diccionario después de ya tener un partida guardada, genera errores como que no encuentra ese valor en el diccionario o cosas así, es decir, no se guarda el nuevo valor agregado al diccionario. Gracias por el video!!
Eso pasa porque estás intentando acceder a un diccionario del que no obtienes adecuadamente su referencia. En los autoload, pues siempre va a ser accediendo al autoload desde cualquier otro script, esa parte no tiene mayor misterio sabiendo como funcionan, y desde otro script, o bien guarda directamente valores de ese mismo nodo, o bien se guarda la referencia de los nodos que contengan los valores deseados para pasárselos al autoload.
En cualquier caso el secreto siempre es una adecuada estructura y dominar bien el "sistema de responsabilidades" que mencione en el tutorial de GDScript, es la clase de cosas que se suelen pasar por alto porque no parecen relevantes, o quizás suenan demasiado simples para prestarles atención, pero que en realidad son de vital importancia. 👍
Como hacer que cuando el juego se inicie el personaje aparezca en la posicion que yo quiera, con codigo en godot 4, o sea en un juego rpg al entrar en una puerta quiero que aparezcan en la escena de la casa en la posicion de entrada, y al salir de la casa quiero que aparezcan en cierta posición, y que se implemente por ejemplo si una casa tiene dos puertas.
Pero eso es independiente al sistema de guardado. Puedes crear puntos de referencia para guardar la posición en un autoload e igualar la posición del player a la posición guardada en el autoload, o en el script de los puntos de traslado crear un export para colocar ahí la posición del player en la siguiente escena... hay muchas formas, pero tienen que pensar, darle vueltas, fallar y volver a probar, es importante que aprendan a solucionar problemas sencillos como este por cuenta propia. No hace falta que sean las soluciones más elegantes, pero hagan que funcione.
@@Leedeo gracias y se que es independiente ajja, solo que vi que era tu ultimo tutorial de godot jaja
Puedes explicar como guardamos las puntuacion en un servidor para evitar que sean manipuladas , tanto con la tabla de clasificación, asi al momento de hacer juegos NFT , los jugadores no puedan manipular nada de lo que este en el servidor
Que sería un tema aparte porque en realidad el método de guardar/cargar partida sería igual, solo que en lugar de acceder a la información local, sería acceder a un servidor y recuperar esa información en línea. Vamos que si hiciera un tutorial enseñando como trabajar con servidores, lo podrías complementar con este tutorial.
No lo hice hasta ahora porque ese tutorial requeriría pues un servidor de pruebas, pero si puedo solucionar eso, con gusto lo hago. 👍
genial, justo queria implementar un save/load en un pequeño juego que estoy desarrollando. Una duda, para el caso save_file = null seria lo mismo que hacer un save_file.close() ??
Exacto!! Es lo mismo, para cerrar el archivo y que no se quede abierto.
Una pregunta mi querido leedeo, en caso de que tenga mas de una variable para guardar es decir game_data_1 y game_data_2, el metodo es el mismo para guardarlo o debo hacerlo por separado en otra ruta?
Se pueden crear tantos diccionarios como uno quisiera de la misma forma, y en lugar de cargar automáticamente uno, puedes crear un selector de partidas, y que dependiendo cual se eligiese, cargase el 1, el 2, o el 3 (o los que uno quiera poner), y al momento de guardar, seleccionases igual en que diccionario se guarda (o slot, que es lo mismo, pero dicho de forma que el jugador lo entienda).
Hay que hacer algunos cambios, obviamente, pero nada especialmente complejo, incluso se podría usar un diccionario multidimensional en lugar de crear varios diccionarios, el resultado sería el mismo pero quizas haya personas que lo vean mas sencillo/legible hacerlo de esta forma.
Actualmente no se hace tanto esa práctica porque ya se ha normalizado mucho tener una sola partida, y realmente soy partidario de ese formato, ya que no vale la pena complicarse, a veces cuánto más sencillo sea algo, mejor, no sólo para el desarrollador, sino también para el jugador. Por eso es que desaparecieron mecánicas como los sistemas de vidas, que realmente solo tenían sentido en un arcade donde se pagaba por esas vidas, pero vamos que todavía se crean juegos que siguen el formato clásico de tener varias partidas, y lo hacen así.
Hola, Ledeo. Me encantan tus videos. He aprendido un montón con ellos. Una pregunta: al utilizar la ruta "user://", ¿sólo podría cargarse la partida en la misma sesión o sería posible cargarla incluso después de que el usuario cierre y abra la aplicación en Android?
Es una ruta física, solo que no es una ruta literal porque cada usuario tendrá una ruta distinta dependiendo del SO, nombre de usuario, etc. eso significa que se guarda un archivo en esa ruta, y siempre que se haya implementado adecuadamente el sistema de guardado, y funcione correctamente, el usuario puede guardar y cargar partida sin importar si cierra la app y la abre nuevamente, para eso es el sistema de guardado. 👍
Esta bueno el tutorial, pero como recien estoy creando el menu jaja no me sirve, pero a futuro si
Al momento de subir un juego a steam por ejemplo, se necesita hacer algo adicional para que funcione con la nube del servicio?
Bueno, eso si no te puedo decir, no he subido ningún juego a Steam, pero aunque lo hiciera, por contrato no podría relevar ningún tipo de información interna incluso aunque sea para ayudar a terceros, pues se considera filtraciones de las que podría aprovecharse la competencia, así que realmente la única forma de averiguarlo es hacerlo y una vez hecho, contactar con el soporte técnico e investigar por cuenta propia. 😅
@@LeedeoQué tal si lo dices con una multicuenta? Nadie lo sabría
hola amigo si aprendo el contenido de este video crees que me servira para guardar partidas completas e visto que algunos juegos pueden guardar partidas completas para los jugadores
Sirve para guardar partidas, como digo en el tutorial, al momento de crear el juego, tenemos que saber como estructurarlo para saber que valores deseamos guardar, y eso es algo que cambia por completo de proyecto a proyecto. Si lo que te refieres con partidas completas es a guardar el estado del juego como hace un emulador, no, no se puede y como digo, ni siquiera investiguen como hacer eso, porque aunque exista un procedimiento no es recomendable, guardando unos pocos valores es más que suficiente.
Pero eso es importante saber estructurar bien un proyecto, aquí es donde cobra sentido el saber programar adecuadamente para que el código sea escalable, y para eso no hay que ser un genio, pero sí hay que ser constante y ganar experiencia. Si lo intenta hacer alguien sin saber programación básica, o no le va a salir en el peor de los casos, o si le sale, va a hacer un hermoso desastre, y eso el jugador promedio no lo perdona.
@@Leedeo cuando digo guardar partidas me refiero a como en el juego de minecraf que uno guarda el mundo que se creo para despues ir armando tu casa despues guardas la partida otro dia seguis construyendo y agrandas tu casa cosas asi mas que nada es possible hacer eso o es muy complejo
@@gon_teseira Se puede, pero Minecraft es precisamente un juego muy bien estructurado y optimizado. Los mundos funcionan por chunks y cada chunk es un array o diccionario conformado por distintos tipos de cubos, así que al guardar partida se almacenan los estados de estos arrays/diccionarios anidados. En realidad es un solo valor con miles y miles de valores anidados, pero el sistema de guardado solo guarda el array/diccionario “padre”, que es el mundo.
Esa es la teoría, puesto en palabras suena fácil ¿Pero es fácil llevarlo a la práctica? No, por eso Minecraft tiene mérito, nadie que no tenga una experiencia brutal va a conseguir hacer un sistema de guardado como el de Minecraft, y está bien, porque alguien sin experiencia ni siquiera tendría porque aspirar a hacer un juego como Minecraft, siempre se ha de hacer juegos que sean acordes a nuestro nivel de experiencia y un poco más, ese extra es el que hace que en el siguiente proyecto seamos un poco mejores, pero si queremos pasar de 0 a 100... es desastre asegurado.
@@Leedeo gracias saludos
Me ayudo mucho para lo que estoy trabajando de guardar la informacion de mis partidas actuales, muchas gracias
Nomas me causa dos dudas,
1: si genero un exe y lo paso a otra computadora que no tiene godot instalado, ¿donde se crearia el archivo para guardar la informacion?
2: En caso de subir el proyecto a steam, al momento de que alguien se descargarse el juego ¿el mismo steam se encargaria de crear la carpeta para estas acciones?
No hace falta tener Godot en el equipo, al generar el ejecutable, a todos los efectos es un software independiente compilado en Godot, y se ejecutará en ese equipo. La ruta donde se guarda se genera de forma automática dentro de la carpeta de usuario de la persona, que difiere del nombre de usuario y del SO, y ese procedimiento es el mismo si se sube a Steam, no hay cambios ni hay que tocar nada más.
Si tú quieres saber donde se encuentra concretamente tu carpeta de usuario, desde el mismo Godot vas a Proyecto > Abrir Carpeta de Datos del Usuario, pero eso es para ti, para testeo, no es necesario que le indiques a nadie esa ruta.
Muchas gracias @Leedeo,
Ya con lo que me dices puedo prestar el exe con confianza a unos amigos para que me ayuden a probarlo
CUANDO HARAS UN TUTORIAL DE VERDAD . DE MUNDO ABIERTO 3D IGUAL QUE GERMAN CORONAL
Un tutorial de verdad de mundo abierto como el de German Coronel!! 🤣, pero si me llevo con German y no hizo ningún tutorial de mundo abierto 3D, y el juego que está haciendo tampoco es de mundo abierto, va por niveles, eso más que un tutorial sería una maestría 😝
¿Se podría guardar un TranslationServer en un diccionario? Me gustaría poder guardar esto:
func _on_espanol_button_down():
TranslationServer.set_locale("es")
pass
func _on_ingles_button_down():
TranslationServer.set_locale("en")
pass
Para que así el juego memorice en qué idioma quiero que aparezcan las cosas. Muchas gracias!
Se puede hacer perfectamente, por ejemplo:
var options : Dictionary = {
"language" : {
"es" : TranslationServer.set_locale("es"),
"en" : TranslationServer.set_locale("en")
},
}
En este ejemplo hice un diccionario multidimensional para guardar los 2 valores dentro del valor language, ya para acceder a un valor u otro, pues sería options[language][es] o options[language][en] 👍
@@Leedeo me lo voy a mirar con calma, porque incluso teniendo la solución delante mio al ser nuevo no se aplicarla ^^u De todas formas muchas gracias
Le di like sin verlo
Jajaja mil gracias!!! Aunque espero que lo hayas visto y te haya sido de ayuda, que también me gusta ser de utilidad 😝 yo creo que sí, porque es un buen método, la verdad.
Tan malo es el metodo de guardar como los emuladores? Eso explica por qué el hack rom de Pokemon que descargué de chico de la nada empezó a pesar 1GB. La verdad que me interesó bastante descubrir eso
Para rendimiento sí, para un emulador puedo entenderlo porque hay juegos clásicos que no tienen puntos de guardado y eso puede ser una forma de hacerte el paro, pero en juegos actuales es inaceptable por completo. Imagínate en Godot, si una escena está conformada por 10 nodos y cada nodo tiene no sé, pongamos 50 parámetros significa que esa escena guardaría 550 datos (sí, porque sumando la escena padre, son 11 nodos en total 😝), y se puede tratar de una planta que adorna una mesa que ni siquiera se mueve jamás y solo ves 5 segundos durante el juego y jamás necesitas volverla a ver, pero ese método no tiene forma de decir "si es una maceta que jamás se mueve y solo ves 5 segundos, no guardes sus datos", porque guardar estado significa que guarda el estado literalmente, vamos que guarda todo por igual, tanto los valores de lo que queremos guardar, como los valores de lo que no.
Por eso lo correcto siempre va a ser elegir uno por uno los datos a guardar, porque podemos pasar de 1 millón de datos, a 10, 20, 30 o 40... el secreto es saber organizarse, y en realidad no es que sea algo tan complejo, simplemente hay que pensar un poco y hacer un listado con los valores que uno necesita guardar, hasta sirve para que uno conozca mejor su juego, porque especialmente cuando uno empieza en esto pasa que muchos hacen el juego, pero desconocen realmente lo que están haciendo, y si lo desconocen ellos, más lo va a desconocer cualquier otro. 🤣
Hay una forma de usar file accses en godot 3?
Tengo un tutorial para Godot 3 ruclips.net/video/Ti_gXTfaNro/видео.html en realidad hay muchos tutoriales de Godot 3 en el canal, se pueden acceder desde las listas de reproducción.
Respeto a lo de usar una función nativa de una versión superior, recomendaría que no te molestes, es mejor no perder el tiempo con esas cosas. Cada software tiene sus particularidades, y cada versión de dicho software también puede tener las suyas propias, entonces lo mejor es no complicarse y usar las características/metodologías del software que estamos usando en ese momento, aunque por supuesto sirve entender el funcionamiento sin importar la versión (la lógica de programación, por eso es que pongo mucho énfasis en las explicaciones) para poder saltar de versiones, y poder adaptarse a nuevas metodologías más rápidamente, pues finalmente la lógica suele ser la misma, y entendiendo bien las cosas también podemos entender si llegase haber cambios.
@@Leedeo gracias, en realidad solo no uso godot 4 porque mi computador no lo puede correr, realmente te lo agradezco
Si lo exportas para Android ¿cómo especificas la carpeta?
Igual, es lo mismo en Windows, MacOS, iOS o Android, se le da la indicación a Godot de guardarlo en la carpeta de usuario y automáticamente la detecta, sino imagínate, sería imposible saber la ruta donde guardar porque cada persona tiene un nombre de usuario distinto.
@@Leedeo gracias
chale vine a modificar los damos de mi juego
Una pregunta, es save_game.dat o save_game.dal?
hasta apenas vi porque ya son muchos comentarios y estoy solo en el canal 😅 pero es dat.
PD: Si la gente lee los comentarios y ven preguntas como estás que sepan las respuestas, por favor respondan, así se pueden ayudar entre ustedes y de paso me ayudan a mi, que me gustaría responder todo, pero ya me resulta complicado. 😅
5:38 "Este metodo esta hecho a prueba de tontos" ... Jajaja... usted no me conoce 🥲