Video není dostupné.
Omlouváme se.
Este juego está MAL optimizado pero NO IMPORTA
Vložit
- čas přidán 9. 09. 2021
- Está bien optimizar los videojuegos, ¡pero hasta cierto punto! Hagámoslo de manera inteligente, sólo cuando realmente vaya a dar resultados y no perdamos tiempo trabajando en algo que poco o nada va a cambiar.
🎮 Flatworld an Steam: store.steampow...
⭐ Patreon: / guinxu
🌏 Mis juegos: www.guinxu.com
🐦 TWITTER: / guinxu
📷 INSTAGRAM: / guinxu
▶▶ Música usada en el vídeo ◀◀
Intro: "Shell Warfare" (Hylian Lemon / ocremix.org)
OST de Chrono Trigger
Outro: "Golden Sun Rebirth of Venus" (Matt R., S. Battle / ocremix.org)
Me llamo Guinxu y desarrollo videojuegos indie en Unity para PC (Steam) y Android. En mi canal te ayudo a crear tus propios juegos y manipulo juegos conocidos para aprender cómo funcionan sus trucos y técnicas. Además comparto los avances de mis proyectos y cómo soluciono los bugs que surjan.
Pobre del que diga "Es que Guinxu promueve hacer juegos mal optimizados!" porque todo lo contrario. Ese no es el punto del vídeo xD
GINCHU
Buen video
Jinchu 🥵
copiloto de coches otaku XD
Ginshu
Guinxu promueve a hacer juegos con mensajes secretos para el gobierno ruso
Shitpost:
En un antiguo trabajo tuve un compañero de Ucrania q dejaba comentarios en ruso. Nunca supimos qué decían...
@@solanamcco7261 😃😀😐🤨
@@JesusEPV yo
Denunciable xD
"te introduzco lo que me pidas" 7:55
Se nota que hay confianza
😳
Momento "Ara ara"
Le va a enseñar cómo meter el cartucho en el adaptador
bromomento
Diablos señorito 😂😂😂😂😂😂😂
Me recuerda a cuando miré la decompilación de Pokémon Esmeralda y la gente había comentado algo así como "Game Freak no sabe usar arrays" xD
No sabia que se hubiera filtrado, necesito ver el código fuente a ver qué hay :)
Hombre sir Gary cuento tiempo sin verte
Edit: me olvide de ti x'd
Yo intenté ver el disassembly de Pokémon R/B no entendí nada xdxdxd
Es lenguaje de máquina, encima la GB tenía una CPU hibrida entre intel 8080 y z80, es un poco caos de entenderlo, pero si te aprendes las instrucciones de la cpu puedes ver como funciona el juego.
7:56 *"Te introduzco lo que me pidas"*
*-Guinxu*
2:25 *”Si ya corren estupendamente bien tal y como están, ¿para qué tocarlos más?”*
-*Guinxu*
alva: introduce tu dinero en mi cuenta
Estaba buscando este comentario
@@yoshis7778 comentario copiado
@@hecthor6000 si fue copiado pero de mi comentario ósea yo no se si alguien mas puso eso antes
"Do you believe in gravity?"
Solo con eso ya me convenciste de comprar flatworld y de aprender programación, grande guinxu
grande
Oh my god another jojoreference
¿Acaso los encuentros no son alguna clase de gravedad?
Ni modo, a añadir flatworld a mi lista de deseos
@@edwinmonge9155 Entre usuarios de stand sí
Vamos, que no hay que ponerse locos por el rendimiento
ya que no todo hace que tu juego vaya lento.
Lo importante es evitar darle al programador sufrimiento
porque, no te miento, si nunca acabas tu juego, solo habrá hambre y lamento.
Inspirador 😔😔
Pa cuando el call of gruty 🤑🤑🤑🤑👌👌👌
Vamos lo que dicen por ahi, si funciona no lo toques
Vaya hasta rima xD
@@sebascolorgg4984 AKAJAJJSKA
@@ISuperI si XD
En la asignatura de optimización y concurrencia en la carrera, la afrontamos de una forma muy peculiar. El profesor nos dio un juego básico de estrategia estilo age of empires hecho en Unity "a lo bruto" y a lo largo de la asignatura íbamos optimizandolo, arreglando cosas, haciendo otras "de forma elegante", usando threads, etc. Pues el object pooling (aunque Unity tiene el suyo tuvimos que programarlo nosotros) fue la forma de pasar de máximo 500/800 soldados a, potencialmente, una cantidad estúpida de soldados.
7:54 "Tu ya sabes que hay confianza y te... introduzco lo que me pidas 7w7"
JAJAJAJA
Haganle fanfic
Juegos mal optimizados.
YandereDev: Aquí es donde entro yo.
El tipo según programadores era muy novato y programaba de forma muy sosa, no recuerdo el nombre, pero lo estaba haciendo como si sumáramos 1+1+1+1 hasta llegar a 100 en lugar de 50+50=100,así de ineficiente era.
@@moisespleytez si mal no recuerdo había hecho eso para tomar el tiempo del juego, algo que es bastante ineficiente ya que esa suma se actualiza x cada frame, va, eso es lo que entendi
@@moisespleytez lo peor es que un programador profecional se ofreció a reescribir toooooodo el código y YandereDev se enojo y acabo rompiendo lazos con la empresa del desarrollador
Dizque tenía un cepillo con 10.000 polígonos.
@@GabrielTorres-us5uc no era un programador solo, sino que era el estudio indie tinyBuild ( los desarrolladores de hello neighbor) o sea, se perdió una oportunidad bastante grande ahi
7:54 Guinxu: "alva, tu ya sabes que hay
confianza y te _introduzco_ lo que me pidas"
*Guinxu, declaraciones de amor, 2021*
Un ejemplo de object pooling que funciona estupendamente es cuando dicho objeto tiene que inicializar una conexión con algún tipo de servicio de red (como una conexión a base de datos o un servidor multijugador). En esos casos el pooling es imprescindible.
Guinxu, podrías hackear la cámara de Lego Batman 2, y ver cómo es la Ciudad de metrópolis que sólo se puede ver al fondo del mapa pero no se puede acceder a ella
Esa ciudad a la que no se puede acceder es solo un fondo, no hay ciudad en realidad.
@@lisandrulo9573 como el escenario de los need for speed desde underground.
@@xEndkoNx Nunca jugue need for speed
Es solo una imagen, como el puente de kindom hearts
@@aguacatedev5991 tipico de guinxu xd
Guinxu: "te introduzco lo que me pidas" 7:56
Alva: Introduce tu dinero en mi cuenta bancaria
Edit: Me acabo de levantar y esto es una locura, mas de 360 likes!, gracias a todos los que dieron me gusta! jamas habia pasado del auto like, los quiero a todos! ^-^
Jaja
😳😳
Un hechizo simple pero inquebrantable
Alva: lo voy a gozar... Como no lo puedes imaginar.
Guinxu:pero primero te introducire algo más antes de introducir ese dinero ( ͡° ͜ʖ ͡°)
8:00 te introduzco lo que quieras
Álva: *se sonroja *
En un juego que estoy programando, al destruir una caja daba orbes, el problema es que después de cierto tiempo el juego se realentizaba, igual puder usar pooling... Pero el remedio fue que el comportamiento individual de los orbes los volví una función, que cada objeto llamaría y santo remedio, va fluido.
Guinxu por favor ve a dormir, ya esta tarde uwu
aaa 2 segundos
no
uwu
**un youtuber famoso aparece**
Todos: khe haces aki?!
O
Hombre, los Wario ware? Porfavor, son tan buenos juegos que de ahí salen juegos tan Buenos como pureya
Xd
Más que todo yo diría que el object pulling viene a ser una buena práctica, viéndolo de en proyectos pequeños no existe diferencia alguna, pero a mayor escala supongo que sí daría un impacto significativo
7:50 wtf ginxu le introduce lo que quiera
Alva, ten cuidado cuando te enseñe matemáticas, Guinxu empieza enseñándote como optimizar el minijuego del flamenco y cuando menos te lo esperes está enseñándote a elevar el miembro a su máxima potencia, guiño guiño.
Me ha molado el vídeo, me gusta mucho lo relacionado con la optimización. Pedazo pósters, ten cuidado con ellos 👀
Nah, Alva no parece de esos que se traga cualquier cosa :-D
Grande
Guinxu diciendo que no hay que optimizar juegos , ese es tu ídolo?
Pues el mio si
si
Si
claro el desarrollador de confianza
Yo diría que entendieron mal el mensaje del vídeo xD
5 años siendo desarrollador web y lo más clave que aprendí es: las buenas prácticas no existen, todo es situacional. Está bueno tener una base de referencia a la que acudir, pero hay que entender el porqué se usan las cosas que se usan, y evitarlas cuando sea necesario.
Existe el sesgo en la industria de "saber y aplicar siempre las buenas prácticas", que por suerte mucha gente ya está dejando de lado pero reinó el rubro durante años y años.
Tal cual: ahora mismo está de moda la "programación funcional", y ya leí incluso una entrada de un tío que dice que abandona completamente la programación orientada a objetos por la programación funcional porque la programación orientada a objetos tiene graves errores de base (y pone un par de ejemplos que se conocen desde hace años y que, de hecho... SON ANTIPATRONES).
Lo que hay que hacer es utilizar lo mejor para cada cosa, y punto. No empeñarte en usar POO/funcional/declarativa para todo "porque es lo que está de moda".
Muchas buenas prácticas están ahí para que otro pueda leer y entender tu código sin tener que dedicarle demasiado tiempo. Puedes no seguirlas, pero entonces la persona que venga detrás lo sufrirá... Y hay que ser buena gente
El asunto es que algunos siguen las buenas prácticas como si fuese una biblia Haha claramente esa no es la idea, lo ideal es entenderlo y saberlo aplicar cuando lo amerite...
@@lorenzito0852 concuerdo totalmente
@@lorenzito0852 hay que ver cuándo compensa un código óptimo frente a un código entendible / mantenible. Si nadie más que vos mismo entiende el código no sirve de nada a futuro 😂
El código de flatword: pensaste que era código pero era yo DIO
En CZcamsrs Life un programador se tomó tan en serio el tema del pooling que detrás de la pared de la habitación podías encontrar cientos de bolsos de la madre esperando a ser necesitados (sólo se usaba uno cuando hacías algo muy bien y te daba una propina), cientos de vasos para cuando se necesitaban en la discoteca y todo tipo de objetos que se instanciaban a lo largo del juego
1:10 NO WAY... ALVA MAJO REFERENCE!!!???
4:54 agárramela que me crece, te falta vía pública guinxu
Cuando tu juego corre a 59 fps y no a 60 :'v
Guinxu: no te obsesiones con la optimización >:c
7:00 método de newton para cálculo de raíces. Alva quiere evitar usar mates y las termina inventando. De hecho hay funciones imposibles de resolver por fórmula (que una ecuación no tiene solución analítica) y se usan métodos numéricos para ello.
Estaría interesante un vídeo hablando sobre aplicar la destrucción en el entorno como lo hizo Gears of war 2 (tenían las coberturas y algunos objetos una especie de corteza destruible y cuando se la quitabas toda ya no quedaba nada más que un objeto de pura piedra)
Hay que recalcar que con estos temas de optimización y buenas prácticas, no se hace solo porque algunos lo hacen(como menciona Guinxu) pero tampoco es buena idea ignorarlo o evitarlo, esto por diversos puntos específicos, empezando por proyectos con escalabilidad y también por cuantas personas colaboran en el código. Obviamente si el objetivo es hacer un juego simple y que cumpla con tus objetivos como desarrollador sin tener que complicarse mucho, lo normal es no hacerle tanta mente a esos detalles. PERO, si el objetivo incluye un alcance mayor, desarrollado por etapas y que incluirá mano de obra adicional, las buenas prácticas y trucos de optimización llegan a reducir dolores de cabeza y a asegurar que tu trabajo no tengo problemas y que los que ayudan en el código tampoco se retrasen o afecten algunos otros script... Son temas interesantes que hay que saber y conocer un poco para medirse bien.
Guinxu, podrías hacer un video explicando la inteligencia artificial de un videojuego de pelea?
Ejemplos serían:
Marvel vs Capcom,
Mortal Kombat o
The King of fighters.
Te lo agradecería muchísimo 🙏
(Autolike para no morir ignorado)
Oye Guinxu una pregunta: ¿Como podrias meter un easter egg de manera efectiva ?
La verdad es que sería un buen tema de video
Un Easter Egg es solo una curiosidad, un detalle escondido creado por diversión, puedes hacerlo como tu quieras. Incluso hacer referencias en los dialogos es un tipo de Easter Egg.
Por ejemplo el "do you believe in gravity" es un secreto del Código de Guinxu.
Pero es verdad, es buen tema para video.
@@penkinodenuevo7468 Quien no creería en la gravedad? Una prisionera que se vista de Billie elish?
7:52
todos: malpensando
yo y seguramente alva: pon todo tu dinero en mi cuenta bancaria
Todos hablando de "te introduzco lo que me pidas" pero alguien se dio cuenta del calvo con coletas XD 10:32
._.
Y lo noté y me dio miedo.
La lección del día, no optimicen juegos 👍
Okno, optimicenlo
Lección del dia, ginxu esta dispuesto a meterle a alva lo que alva pida
@@Hola-cx6fu XD
7:25 Ginxu: Soy mejor y mas inteligente que Alva 😨
9:15 Ginxu: De nuevo, soy mas inteligente y poderoso que tu Alva 😱
Guinxu, sabias que puedes sacar lo que detecta la region de una nintendo? hay varios tutoriales, deberias probarlos, es mucho mas economico que tener adaptadores
En uno de los juegos de estrategia que hice este año tuve que usar object pooling justamente para las balas.
Sin usarlo también funcionaba pero si que se notaba una mejora de ~20fps.
Coincido 100%, hay que usarlo si realmente es necesario 🙌
A juro
"Alba, ya sabes que hay confianza y te introduzco lo que me pidas" xD
Mi mayor pregunta es porque ARK Survival Evolved, un juego que es del año de 2015, aún con los componentes de un ordenador del 2018 y 2019, no pudo conseguir mayor tasa de frames... Será por lo enorme del mundo y más cuando se enfoca al multijugador? O le falta pulir algunos archivos? Porque no creo que su problema sea el motor grafico, o me equivoco?
ARK está peor Optimizado que PUBG en su inicio.
Bró, yo no me explicaba porque me lo corría tan lento, creí que me faltaban drivers porque con esas graficas kk que tiene es acojonante lo que pide, tuve que jugarmelo a lo minimo para no romperme la cabeza iendo a 25fps
@@moisespleytez solo es mala optimización, necesitas poder bruto pa moverlo
El motor grafico es malo y el juego está mal optizado, se supone que ARK II va a ser mucho mejor, con unreal engine 5 va a estar muchisimo mejor optimizado y mejor visualmemte
@@pilathebattery5801 pubg actualmente es una mantequilla en equipos medianos.
Hola Guinxu, com le haces para sacar la camara en cualquier juego? me gustaria poder hacerlo
0:36 sin duda alguna ese es el mejor coche del mundo
Si
No pa los autos otakus tienen un olor asqueroso y además dan vergüenza :(
por optimaciones bestia es el código de doom es básicamente poesía. esta optimizado tan minuciosamente que portear a cualquier plataforma es muy sencillo y no consume casi nada de recursos en hardware precario ..... solo digo mas nada
Joder en una prueba de embarazo!!!
@@MasterGiant4841 xD
Se puede ver parte de su código?
7:45
Guinxu: Alva ya sabes que hay confianza y te introduzco lo que me pidas 😉
Alva: XD
7:55 me encanta como alva y guinxu se la pasan haciendose insinuaciones xd
7:54 "sabes que ya hay confianza y te introduzco lo que me pidas"
8:31 si... creo en la gravedad
yo una vez utilize el object pooling, estaba creando un juego para scratch llamado worldwars, el juego era de aviones y cuando empezaba a lanzar balas, osea muchas se crasheaba el juego, no sabia porque, luego vi este video y me salvo mi vida GRACIAS GUINXU!!!!!!!! Gracias a ti mis juegos se volvieron muy conocidos con 1000 visitas, espero que llegues pronto al millon!!!!!
Guinxu, una pregunta, ¿Como funcionan internamente juegos como Doki Doki cuando se alteran carpetas?
Y otra cosa, se que no tengo derecho en meterme en flatworld, pero no crees que podría ser buen idea poner un jefe o masmorra que pueda romper la cuarta pared? O ya rompe la estética del juego?
Bueno no soy Guinxu pero la respuesta a tu pregunta no es ciencia de cohetes, los juegos requieren varios archivos para funcionar, y si se tiene planeado una alteracion en especifica (Como por ejemplo, borrar el Monika.char en Doki Doki), simplemente se hace que el juego si no encuentra ese archivo, actue de cierta manera diferente a la que actuaria teniendolo.
Claro, esto teniendo planeado la modificacion de archivos, de otra manera sencillamente el juego o no arrancara, se corrompera o faltaran cosas.
La verdad, dudo que no haga algo como eso, tiene un muy buen sentido del humor
Oye guinxu cuando hagas un vídeo de mover camara para ver los trucos, puedes hacer una toma del guardado de partida en Metroid prime, en el guardado en la nave de Samus
6:01 justamente, yo hace poco hice un "prototipo" de un juego (que deje por problemas de organización y optimizacion) en el que para hacer combos y acciones asi, creaba y destruia objetos y eso causaba que en pleno combate los fps bajarán extremadamente, pasando de 60 fps al principio del combate a solo como 15-10 fps, gracias guinxu por los consejos sobre optimizacion, lo tendre en cuenta si decido retomar el proyecto y hacerlo un juego de verdad😉
No sabía que habían hecho Japan Weekend BCN (por el cv19) 🤔. Espero que te lo hayas pasado genial 🌸🤗.
Si
No
No
No
No
No
Video de guinxu fuera del horario habitual? No estaba preparado!
Trabajo en una empresa de videojuegos móvil (Genjoy, en Sevilla) y he trabajado en el motor de Match3 que lleva nuestro juego Tuscany Villa. En nuestro caso el Pooling ha sido necesario para los Renderer y VFXs del juego, son objetos que tienen ParticleSystem que al instanciar meten bastante Garbage, y los Renderer tienen bastante carga en su jerarquía con bastantes sprites y algunos VFXs de los que hablaba antes (destrucción, spawneo de piezas, etc).
También te digo, el Pooling mete muchísima carga de trabajo para que los objetos de los que se hace Pool se puedan reactivar sin ningún problema, y haberlo hecho a medias del curso del proyecto ha sido un tremendo coñazo porque ha dado muchísimos problemas de objetos que no se reseteaban correctamente de su estado anterior para tener su nuevo estado.
Una pregunta,he ido a la playstore por curiosidad y me extraña que solo respondan en inglés (ō-ō),al menos en las primeras reseñas,¿no deberían responderles en español o ya esta predeterminado al ser la lengua más usada? Claro que creo que trabajas en esa empresa ^^ y que es un proyecto sevillano que por cierto soy de allí pero da igual xD ,solo que no entendí eso,si esque es un bot con respuestas regulables y que hay alguien que supervisa los comentarios y a veces responde...Se nota que no se apenas _del feed en la playstore y como se gestiona el trato con los usuarios_ así que lo siento si dije alguna tontería o pregunté algo estúpido :/ ,como que en realidad es una normativa que se responda en inglés o algo por el estilo ╮(─▽─)╭
Aa y se ve interesante el juego =,>
°. Apenas tengo espacio así que no puedo instalarlo *pero me encanta la decoración (uwu)* y en los videojuegos más,como en los Sims :3 ,Minecraft y como fan de Animal Crossing tengo el ACHHD (que largo xdd) ,y de juegos móviles probé un día uno al estilo chibi kawaii,pero es cierto que abundan,lo bueno esque esta mejor si le haces ciertos detalles que lo diferencien o hagan la experiencia mejor y creo que las tiene :3 ,aunque tenga los "tópicos" de minijuegos como el de unir comida para ganar cash X,D (no se por qué se usa tanto ese minijuego ._.) ,así que solo opino por lo que se publicita y el diseño gráfico que se ve lindo~ n-n ,pero como no lo puedo probar pues nada más que decir de el (•.•U)
Este video me define. xD
Para mi proyecto principal, hago optimizaciones minuciosas, hasta un punto obsesivo...
Para el juego que hice para Tu Juego A Juicio Jam, a falta de tiempo, al que le corra, genial, y al que no, lo lamento. xD
Para guinxu
Hola Guinxu me gustaría que hicieras un video hablando de explicando porque el juego crashea en un punto espesifico, a que me refiero, ejemplo, en un punto del juego "undertale" hay una escena donde un jefe te habla y cuando acaba la charla te cierra el juego, no es un fallo esta diseñado para que se sierre y cuando vuelves al juego empieza la pelea contra ese jefe entonces me gustaría saber como es que los desarrolladores hicieron que después de que el juego se cierra cambian las cosas y obvio como hacen para que el juego se cierre en ese momento específico
No es algo muy difícil , cuando apretado salir en un juego ejecuta una función que cierra el juego , hacen lo mismo solo que sea en un momento contesto ya sea con un código que el jefe hablé y cuando termine de hablar habilita la función para que se cierre el juego
En unity, la secuencia seria:
El jefe dice lo que tiene que decir.
Se hacebn los cambios.
Application.Quit();
De nada uwu
Depende del motor, es solo almacenar lo que tengas que almacenar y cerrar el juego
@@joacomedel2827 gracias no soy desarrollador ni muchísimo menos pero la verdad era algo que me ha tenido intrigado vastante tiempo
7:55 hijole como asi se nota la confianza XD
Wow, guinxu, tu adivinas el futuro, yo hoy mismo estaba viendo el video de lo del minijuego del flamenco y me hice la duda sobre como no se ralentiza y unas 3 horas despues llega tu video
Guinxu: "... es más ajustado que los pantalones deportivos de Alba Mayo"
Alba Mayo: "¡Guinxu! Deja de usarme en tus analogias"
Vaya confianza que hay entre Alva y tú ¿eh?
Por cierto, está chido ese lugar al que fuiste ojalá hubiera podido ir :,)
Gran video como siempre, guinxu mi juego favorito es el mother 3 y siempre he querido saber como funcionan las mecánicas de la música con los combos, me haria mucha ilusion si un dia hicieras un video sobre eso :)
0:00 entendi esa referencia de Danidoube TV
Lo mismo pensé.
Hoy en día tenemos equipos muy potentes y creo que hacer un juego 2d optimizado no es un problema a como tenían que ingeniárselas antes para optimizar un juego xd.
10:33 ¿El de abajo es Zun?
Respecto al objet pooling... En los juegos suele suceder eso con los casquillos de bala... Cuando hay muchos en el piso empiezan a desaparecer y a ser remplazados por los actuales que bota el arma (manteniéndose así un número constante de casquillos)
10:33 Que lindo peinado, le daba.
6:26 eso esta desordenado si vieras los míos
Es que los de WarioWare están 4 universos paralelos adelante de ti y supieron que en un momento Guinxu iba a venir a hackearse el juego
Yo tuve un caso donde puse en práctica lo de reciclar objetos en lugar de crearlos y destruirlos. Fue en la carrera, en la asignatura de laboratorio de simulación (teleco): teníamos que simular un sistema de colas múltiples, donde distintos eventos entraban en varios recursos con colas y consumían un cierto tiempo en el recurso, y al salir entraban en la cola de otro recurso, o salían del sistema (todo en C++), y a partir de la simulación, obtener valores como el tiempo medio de espera en cola y demás. Cada evento era un objeto, y efectivamente, si creaba un objeto nuevo cada vez que lo necesitaba y lo destruía cada vez que ya no lo necesitaba, iba muchísimo más lento que si hacía un pool.
Sin embargo, creo que se el motivo de que tú no notases diferencia y yo sí: en C++ la gestión de memoria es explícita: cada vez que hago un new() o un malloc() se reserva un bloque de memoria, lo que implica recorrer una lista enlazada para buscar un bloque libre de tamaño suficiente, ajustar la lista de bloques libres si se encuentra, pero si no hay entonces hay que llamar al núcleo para que modifique las tablas de páginas y segmentos del procesador para reservar más espacio direccionable al final del heap, lo que encima te desbarata la caché... vamos, un proceso bastante lento.
En cambio, si no me equivoco, tu usas o JavaScript o C# en Unity, y esos son lenguajes que corren sobre una máquina virtual (por mucho que se compilen a nativo por debajo, siguen teniendo un runtime bastante gordo), e incluyen gestión automática de memoria. Es por esto que, muy probablemente, hagan cosas como reservar más memoria de la necesaria, contando con que en el futuro la van a usar, y así reducir el número de veces que hay que tocar las tablas de segmentos/páginas y llamar al núcleo (cosa que también hacen algunos MALLOCs avanzados en C, por cierto; por ejemplo, si pides X bytes, ellos reservan a nivel de sistema operativo hasta la potencia de 2 más cercana por arriba, de manera que les queda sitio extra para pequeños trozos que se pidan más adelante. Si no recuerdo mal, así lo hace gmalloc, el malloc portable de GLib), además de que, al trabajar con objetos de manera nativa, muy probablemente hagan un pool interno de objetos "terminados" en base al tamaño, con lo que cuando haces un "new" para un nuevo objeto del mismo tipo, pueden obtener muy rápidamente un bloque de memoria del tamaño adecuado.
A fin de cuentas, como ya sabes, en C/C++ la gestión de memoria es explicita y no existe realmente un runtime por debajo, lo que significa que no se pueden hacer muchos trucos que un sistema con un runtime como C#, Javascript o incluso ObjectiveC sí pueden hacer.
En mi caso, además, hice una optimización extra: dado que no sabía de primeras cuantos elementos iba a necesitar, lo que hacía era partir del pool vacío, y cada vez que necesitaba un elemento y el pool estaba vacío, entonces lo creaba, pero al terminar con él lo metía en el pool en lugar de destruirlo. Así la cantidad iba subiendo, pero en cuanto se alcanzaba un régimen estable ya no se creaban más. Pero, y esta es la verdadera optimización, no creaba sólo uno, sino que pedía un bloque de memoria del tamaño de un múltiplo de una página del procesador (por ejemplo un múltiplo de 4kbytes en x86, o de 8kbytes en SPARC; si mal no recuerdo, pillaba un bloque de 64Kbytes) y creaba dentro de él los nuevos objetos. De esa manera reducía al mínimo posible la llamada al sistema operativo para ampliar las zonas de memoria disponibles y las comprobaciones que tiene que hacer para saber si el bloque que pedí entra en lo que ya tengo o no.
El resultado fue que quedé segundo. Y no quedé primero porque el otro hizo trampas al saltarse un requisito que ponía claramente en el enunciado de la práctica. Pero esa es otra historia, y debe ser contada en otra ocasión :-D
Y hasta aquí la historia del abuelo cebolleta :-)
07:56
Bien dicho que donde hay confianza entra la ... Amistad* Guiño Guiño*
No le crean,lo mejor es al hacer tu juego lo único que tienes que hacer es poner de requisitos esto:
Rtx 3090
Core i9 11900k
32gb ram
200gb almacenamiento
Como que 200 Gb póngale que 500 Gb y así no nos preocupamos por el peso del juego
Justamente, a veces el proceso de refactor no vale la pena porque requiere mucho tiempo y recursos. Aunque si esta bueno tener buenas bases iniciales para que el proceso de desarrollo no sea caotico
Enhorabuena por esa caza del StarOcean para SuperFamicom!! Podrías mostrar tu cole actualizada para inspirar compras!! Un saludo
Como dijo Donald Knuth "La optimización prematura es la raíz de todos los males."
Resumen: Los codigos de guinxu son god y los de alva zzzzzzzz
Juegos mal optimizados
Geometry Dash: yo inventé eso
7:55 " tu ya sabes que hay confianza y te introduzco lo que me pidas "
siempre que uno hace juegos con mucho spawn de objetos es buena idea crear un manager que extienda la funcionalidad del garbage collector, en unreal al menos siempre que tenga un pool de objetos muy grandes, busco de spawnear solo el objeto una vez, y luego con ese mismo generar mallas instanciadas, de todas maneras dependera del codigo y la logica que pretenda
en resumen: hay que optimizar la optimización jajajaja buen video guinxu
10:53 OH GOD!! Es un juego de Morning Musume!!!... Sinceramente no lo conocia, pero en cuanto lo vi me emocione a ver a las mini moni (y las demas integrantes, claro), yo mataría por tener ese juego...
P.D: ver algo que me gusta en el canal que me gusta, simplemente epico.
Una vez hice un emulador de chip8 en kivy, y simulaba una pantalla antigua usando varios objetos en forma de cuadrados, al probarlo en Android me di cuenta de que la emulación tenía demasiado lag.
Así que recurrí al object pooling, lo que hice fue crear todos esos cuadrados al principio y solo cambiar sus propiedades, al realizar las siguientes pruebas ya no había lag.
Explica las buenas prácticas de la optimización de código y gráficos
11:37 Anciano explica relaciones con su esposa.
XD
A buenas horas el vídeo. 😂
La pregunta es, que hace usted despierto ? 🤨
@@jalow6446 Buena pregunta 😂
Podrías probar el object pooling con enemigos que aparecen continuamente y que tengan muchas variables (cambio de texturas, clases y armas, dificultad random, etc.) Y cada vez que se haga el spawn de un enemigo, se cambien esas variables en vez de crear una nueva instancia. Igual y así sale más fácilmente el vídeo del object pooling.
O si los enemigos necesitan traer datos de un API para poder instanciarse, también podría ser útil el object pooling debido a la latencia pero solo sería útil en casos muy específicos
con ese mensaje final me has animado a empezar a hacer juegos, me encanta hacer historias, y jugar videojuegos, empezaré a crear juegos con muñecos stickman y espero algun dia aprender a hacer pixel art uwu
Mi juego favorito es hackear juegos
yanderedev: XD
7:54 la parte del video más sacable de contexto, lo ame
en mugen los helpers consumen recursos a la hora de su uso ya que si un personaje tiene programado muchos codigos helpers=ayudantes ya sea para llamar a un explod=imagen o sonido se vuelve tan lento en carga entre carga de personajes para cada pelea ejemplo si hago un 1 vs 1 y uno de los personajes esta programado a puro codigo helpers se va a tardar mas en cargar todo el personaje completo y lo que yo hago es disminuir los helpers y modificarlos a explod para reducir la carga y solo dejar 1 o 2 codigos helpers en el personaje que los uso dentro del mismo motor osea el archivo general que llama a los efectos.
pero tambien depende de que disco tenga uno para la lentitud de carga en el principio ya que no solo codigo tarda sino tambien lo que son los archivos de sonidos los archivos de imagenes etc, y peor tarda mas si es un personaje con doble modo y no esta optimizado para que la carga sea menor.
Soy uno de los primeros por primera vez
Primeros en comérsela
En mi caso hice hace tiempo una prueba en Unity donde instanciaba entre 6000 y 20000 balas que hacían patrones estilo touhou. Si los creaba y destruía iba entre 2 y 7 FPS.
Si usaba Object pooling si había incremento, pero era un lío. Tenía que poner una pared detrás de los personajes y hacer que sus balas al colisionar con sus paredes volvieran a la pool y el número de balas era muy difícil de calcular.
Haciendo pruebas encontré que con 400 sólo había algunas pocas veces que desaparecían balas. Esto hizo una subir los FPS entre 25 y 90.
Por último usé DOTS ECS, una tecnología donde se tratan de forma diferente los objetos y sus scripts y se puede hacer multrithread. Fue bastante complejo de hacer porque hay poca información pero el incremento fue bestial, subió a alrededor de 400 FPS, y si lo ponía con Burst Compiler subía de esos 400 a 900 de máximo.
Lo de la pata del flamenco me recordó a mí mismo en BUP: habíamos dado en física las ecuaciones de Schrodinger para los orbitales, y claro, yo veía los dibujos de los orbitales en el libro y no entendía cómo el orbital P podían ser dos medias bolas, así, sin más. Así que cogí el QBasic y su famoso modo 13 e hice un programa que pintaba la ecuación, a ver qué demonios salía. La cuestión es que la ecuación utilizaba coordenadas polares, pero la pantalla trabaja en coordenadas cartesianas. Podía pasar fácilmente de coordenadas polares a cartesianas mediante SIN() y COS(), pero yo necesitaba lo contrario: pasar de cartesianas (la coordenada de pantalla) a polar (el ángulo y el módulo), para calcular el valor de la ecuación en cada pixel, y para eso necesitaba el ARCSIN y el ARCCOS (o sea, las inversas)... ¡¡¡Y EL QBASIC NO LAS TENÍA!!! ¡¡¡Sólo tenía ARCTAN, la inversa de la tangente!!! Así que no me quedó otra que hacerlo al revés: en vez de recorrer 0
0:36 guinxu eso es tuning o vinilos pero eso es genial me encanta pero yo le pondria el sonic jejeje me gusta sonic
Una vez hice un bullet hell con eso de crear y destruir en game maker aunque nunca me paso nada, la única optimización que tenía era que las balas al salir de la pantalla se destruían.
11:08 :0 alto poster de jojo, guinxu es jojofan B)
8:28 sabía que habían JoJoreferencias !!! 🤑🤙🏻
Yo he llegado a hacer unos pocos juegos con un sistema de objetos que se creaban y destruían (balas con efectos de partículas) y en general no hubo ningún bajón de fps, y eso que lo probé directamente en un celular del 2016.
También hice un port del juego a html5 en canvas2d y aún así estando usando un solo hilo no hubo problemas.
Una pequeña nota, en el port solo se lageaba cuando el objeto se dibujaba por primera vez