¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3397 miembros registrados.
El último usuario registrado es LucasGF.

Nuestros miembros han publicado un total de 79808 mensajes en 11257 argumentos.
Navega con Google Chrome
[DESCARGA]

[RMXP] Lement Ado Antilag

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

[RMXP] Lement Ado Antilag

Mensaje por orochii el 2013-06-07, 03:34

Lement Ado Antilag
Autor: Orochii Zouveleki - Versión 1.01 (para RGSS, testeado en 1.02J)
PRECAUCIÓN:
En cierta medida es código experimental xD. Mejor lo probamoh un rato antes de decir que funcione al 100x100 xD. Pero en teoría, debería mejorar el rendimiento del RMXP en CUALQUIER parte =D. Mapa, menú, batalla, whatever.
En fin, ésto es más un disclaimer xDDDD.

Descripción:
La intención es hacer un antilag global que sencillamente actualice los gráficos SOLO si el gráfico está dentro de la pantalla. El funcionamiento es simple, y no requiere configuración =D. Y NO debería dar problema con ningún tamaño de gráfico/chara/loquesea c:.

Características:

  • Antilag. Si gráfico ta fuera de pantalla, no se actualiza su posición ni se hace el intento de dibujarse.


Captura:
No compatible (?).

Código:
Versión 1
Código:
class Sprite
  alias asd_update_asd update
  def update
    sx= self.src_rect.width; cx= self.x - self.ox
    sy= self.src_rect.height; cy= self.y - self.oy
    return if (cx < (-16 - sx ))||(cx > 656)
    return if (cx < (-16 - sy ))||(cx > 496)
    asd_update_asd
  end
end
Versión 2
Código:
class Sprite
  alias asd_update_asd update
  def update
    sx= self.src_rect.width; cx= self.x - self.ox
    sy= self.src_rect.height; cy= self.y - self.oy
    return if (cx < (-16 - sx ))||(cx > 656)
    return if (cx < (-16 - sy ))||(cx > 496)
    asd_update_asd
  end
end
class Game_Event < Game_Character
  alias asd_update_asd update
  def in_range
    if @tile_id >= 384
      sx = sy = 32
    else
      sx= RPG::Cache.character(@character_name,@character_hue).width / 4
      sy= RPG::Cache.character(@character_name,@character_hue).height / 4
    end
    cx= self.x - (sx/2)
    cy= self.y - (sy/2)
    return false if (cx < (-16 - sx ))||(cx > 656)
    return false if (cx < (-16 - sy ))||(cx > 496)
    return true
  end
  def update
    return unless (@trigger==3) || (@trigger==4) || in_range
    asd_update_asd
  end
end

Instrucciones de uso:
Insertar sobre Main. Plug & Play.

Compatibilidad:
En buena teoría debería funcionar con lo que sea xD.

Registro de versiones:
06/06/2013 1.00. Versión inicial.
06/06/2013 1.01. Agregado especial para eventos.

Preguntas Frecuentes:
Por ahora, nein.

Saludos,
Orochii Zouveleki


Última edición por orochii el 2013-06-07, 04:21, editado 2 veces

orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6045

Gracias : 266

http://drekirokr.weebly.com/

Volver arriba Ir abajo

Re: [RMXP] Lement Ado Antilag

Mensaje por enanogm el 2013-06-07, 03:47

che, te tiro una pregunta frecuente
Como se usa??
jejeje
se pone $sprite.update en Llamar Script en proceso paralelo??
porque si es asi no me funciona

enanogm
Iniciado
Iniciado

0/3

Créditos 21

Gracias : 4

Volver arriba Ir abajo

Re: [RMXP] Lement Ado Antilag

Mensaje por orochii el 2013-06-07, 03:52

No no, nada más lo pones sobre Main, como cualquier script. Y lo dejas quedito. El script funciona por su cuenta.

Lo que hace es agregar una comprobación al principio del método update. Es el método que llaman todos los sprites para dibujarse en pantalla.

Tú nada más haces como si no existiera el script xD. Scripteas feliz, o mapeas feliz, o etceterá.

Asdf,
OZ

Edit: Si no se nota, es porque funciona xD. Si igual da lag, es que es inútil xD (pero funciona x'D).
Edit2: Em, por probar hice una segunda versión. Lo he probado en un mapa de 38x30 repleto de eventos y tiles al random, y pos... no sé, no me convence ='D. Pero pues igual, estoy experimentando... la idea es hacer algo que quite lag en todo lado.

orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6045

Gracias : 266

http://drekirokr.weebly.com/

Volver arriba Ir abajo

Re: [RMXP] Lement Ado Antilag

Mensaje por youkai el 2013-06-07, 04:36

Hey orochii, te voy a dar una pista sobre como eliminar de forma casi permanente y por siempre (?) el lag xD (Esta forma que voy a decir ahora esta testeada en un mapa de...45xalgo XD con mas de 500 eventos)
La mayor cantidad de lag no solo proviene de los update's de los sprites ni de los update's de los eventos sino de los refresh. O sea, la mayor mayor cantidad de lag se genera cuando $game_map.need_refresh == true XDDDD
Yo tengo hecho un antilag basado en esa teoria y la verdad que responde bien ante todo pero a un costo bastante alto: sacrificar de forma definitiva el refresh de algunos eventos... Nunca lo he posteado precisamente por eso que te dije. No creo que un antilag asi sea muy comercial (??) XD
De todas formas yo estoy(o estube, ahora ando en otro script >:)) trabajando en ello, en hallar la forma de hacer un antilag potente y viable. Si lo deseas podemos unir fuerzas e intentar algo ^^ 2 cabezas piensan mas que 1 ;)
Saludos,
¥oukai

youkai
Soñador
Soñador

0/3

Créditos 280

Gracias : 10

http://sharingannf.wordpress.com/

Volver arriba Ir abajo

Re: [RMXP] Lement Ado Antilag

Mensaje por Wecoc el 2013-06-08, 00:16

De hecho no es tan diferente un método del otro, el lag del refresh viene de la redibujación de todo, entonces el antilag de Orochii en parte también atenúa el efecto del refresh.

La mejor manera de hacer un antilag entonces sería poner los refresh en update constante hacer las dos cosas que decís a la vez, quizá podáis juntar los dos scripts. Si por una parte se minimiza el factor refresh == true al mínimo, por otra se evitan dibujar sprites y windows innecesarios, y además se desactiva el funcionamiento de eventos fuera de pantalla (antilag típicos), el problema debería quedar resuelto. A partir de ahí si aún aparece lag es porque algún otro script no ha sido programado óptimamente o bien porque se usa algún sistema muy potente (como el H-Mode7 por poner un ejemplo).

Edito: Ahora que lo veo, lo que estamos diciendo viene a ser lo que Blizzard dijo aquí:
(...) Usually refresh redraws stuff and drawing is very expensive so constantly drawing tends to have huge slow downs. This is often fixed by refreshing the display only the necessary.

Other lag problems include too many windows/sprites. Invisible sprites and windows need still a lot of CPU time as RMXP wasn't coded too well in that area. If something is invisible or out of the screen, one should always think about possibly completely disposing the sprites.

Yes another category are parallel process events, a huge number of normal events on the map and huge maps. A huge map requires a lot more CPU power. More events mean that more stuff has to be processed. And parallel processes have an unusual behavior. If you have 1 such event with 15 commands, you will barely notice it. But if you have 15 parallel process events with 1 command each, it will lag a lot.

These would be the 3 most common mistakes/causes of lag from the top of my head.

Wecoc
Administrador
Administrador



Créditos 8272

Gracias : 372

Volver arriba Ir abajo

Re: [RMXP] Lement Ado Antilag

Mensaje por Aegrotus el 2013-06-08, 02:23

Wow, he aprendido el porque de los Lag que se encuentran en gran cantidad de proyectos y demos por la internet ( aun usando supuestos script "anti-lag")

Que buen tópico, me impresiona la manera de resolver el problema del lag, gracias a todos por el esfuerzo.

Deberían unir fuerzas Orochi y Youkai... y Wecoc.

Aegrotus
Novato
Novato

3/3

Créditos 66

Gracias : 2

https://sites.google.com/site/aegrotusmaximus

Volver arriba Ir abajo

Re: [RMXP] Lement Ado Antilag

Mensaje por orochii el 2013-06-08, 05:48

xP.
===
Pues bueno, el código que puse está ahí xd. Podemos hacer algo, como en otros temas, contribución comunitaria xD. Podemos unir códigos o lo que sea.

La cita de Blizzard me parece haberla leído, o haber leído algo suyo al respecto. Al menos de él aprendí a tener bastante cuidado con el redibujado de lo que sea. Blizzard, por ejemplo, redibuja EXACTAMENTE lo necesario en sus HUDs. Es parte de la razón de que el BlizzABS tenga huds hechos de colores planos xD (en lugar de usar un clear, usa fill_rect con un color X de fondo -eso yo lo apliqué un poco a mi editor de tags de tilesets -a noob level, porque me enrredé un rato x'D--).

Descomponiendo los puntos de Blizzard...
- Limitación a refresh/redibujado (sobretodo redibujar bitmaps innecesariamente).
- Update a sprites innecesarios (falta obviar invisibles/opacidad 0, pero eso es fácil .-.).
- Ídem a anterior pero con Window.
- Eventos. En teoría cubierto por mi escridtpopdo. Y por cualquier antilag xD.

- Procesos paralelos... ¿¿será posible optimizar eso xD?? Mi idea sería que, en realidad no existen procesos paralelos, porque el RM no tiene multithread. ¿En dónde se va entonces el procesamiento? Ni idea, alguna tontería gigantezca. Sería analizar eso, o borrón y cuenta nueva >=D (osea reescribir esa parte).

Algunos puntos los tenemos cubiertos =D, lo de los paralelos pues... quién sabe si se podrá hacer algo x'D!!!,
OZ

orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6045

Gracias : 266

http://drekirokr.weebly.com/

Volver arriba Ir abajo

Re: [RMXP] Lement Ado Antilag

Mensaje por Contenido patrocinado Hoy a las 12:38


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Scripts

Permisos de este foro:
No puedes responder a temas en este foro.