Please login or register.

Login with username, password and session length
Advanced search  

News:

This forum provides RSS feed. To query recent posts use this url. More...


Author Topic: Optimizar variables  (Read 10229 times)

0 Members and 1 Guest are viewing this topic.

Maidnet

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 50
    • View Profile
Optimizar variables
« on: February 17, 2009, 12:39:33 AM »

Hola a todos,

Una cuestión, a ver si alguien me puede aconsejar...

En mi juego estoy utilizando muchas variables globales, ya que casi todas las acciones requieren de ellas. Llegado a un punto en el juego, la cantidad de variables es tal que por lo visto se ralentiza el salvado de partidas. Mi pregunta es si hay alguna manera de "descargar" las variables que ya no están en uso, con el fín de optimizar el script.

Gracias por adelantado!!
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Optimizar variables
« Reply #1 on: February 17, 2009, 03:16:05 PM »

Hola Maidnet,

prueba a asignar 'null' a aquellas variables globales que no vayas a usar. No se te van a "descargar" completamente de la memoria pero sólo ocuparán unos pocos bytes, y por lo tanto deberían aligerar el rendimiento de tu juego (según Mnemonic).

Un saludo.
Logged

HelLRaiseR

  • I don't want to make a Monkey Island clone :(
  • Moderator
  • Frequent poster
  • *****
  • Karma: 4
  • Offline Offline
  • Posts: 270
    • View Profile
    • Adventure Box Studios
Re: Optimizar variables
« Reply #2 on: February 18, 2009, 11:49:02 AM »

Cuentanos algo mas de para que las utilizas, en que casos, etc. Puede ser que cambiando el planteamiento de la programación, puedas eliminar algunas o bastantes.
Logged
Regards,

    Fernando

Maidnet

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 50
    • View Profile
Re: Optimizar variables
« Reply #3 on: February 18, 2009, 11:23:31 PM »

Un ejemplo de los más comunes:

Tengo una conversación en la cual hay tres niveles. En cada nivel hay cuatro opciones diferentes de respuesta, de las cuales una es la que se usa para "salir" de la conversación.  Para que una vez el jugador haya seleccionado una de las respuestas del último nivel, esta no vuelva a aparecer, utilizo una variable que se activa la primera vez que se ejecuta el script de esa opción, y sirve para que al volver a ese nivel, el script se salte el poner esa opción. Luego, cuando las tres opciones ya han sido seleccionadas, le digo al script que ya no entre en esa rama.

En pocas palabras:

Code: [Select]
while(Loop)
{
if(C_Alfred13!=1)Game.AddResponse(1, ProtaFrases[1]);
if(copazo==true)
{
if(C_Alfred14!=1)Game.AddResponse(3, ProtaFrases[3]);
}
if(C_Alfred15!=1)Game.AddResponse(5, ProtaFrases[5]);
if(C_Alfred16!=1 || C_Alfred19!=1 || C_Alfred20!=1 || C_Alfred21!=1 || C_Alfred17!=1 || C_Alfred18!=1)Game.AddResponse(6, ProtaFrases[6]);
Game.AddResponse(18, ProtaFrases[18]);

Selected = Game.GetResponse();
if(C_Alfred16!=1 || C_Alfred19!=1 || C_Alfred20!=1 || C_Alfred21!=1 || C_Alfred17!=1 || C_Alfred18!=1)actor.Talk(ProtaFrases[Selected]);

if(Selected==1)
{
this.Talk(AlfredFrases[3]);
this.Talk(AlfredFrases[4]);
actor.Talk(ProtaFrases[2]);
this.Talk(AlfredFrases[5]);
this.Talk(AlfredFrases[6]);
C_Alfred13 = 1;
}
if(Selected==3)
{
this.Talk(AlfredFrases[7]);
this.Talk(AlfredFrases[8]);
actor.Talk(ProtaFrases[4]);
this.Talk(AlfredFrases[9]);
this.Talk(AlfredFrases[10]);
this.Talk(AlfredFrases[11]);
this.Talk(AlfredFrases[12]);
this.Talk(AlfredFrases[13]);
C_Alfred14 = 1;
}

Esto es solo parte del script. En este script en especial, hay utilizadas más de 30 variables globales.

Gracias de antemano!!
Logged

Jyujinkai

  • Global Moderator
  • Frequent poster
  • *
  • Karma: 1
  • Offline Offline
  • Posts: 352
    • View Profile
    • Jyujinkai's WME Development Blog
Re: Optimizar variables
« Reply #4 on: February 19, 2009, 05:06:20 AM »

for some reason you can not revice PMs.....

Quote
Please take the time to conform to forum rules on posting code snips.

Here are the instructions here
http://forum.dead-code.org/index.php?topic=2013.0

If you would edit your post
http://forum.dead-code.org/index.php?topic=3456.msg21207#msg21207

Please try to use the bbcode in future posts

Thank you.
Logged
<Antoine de Saint-Exupéry> In any thing at all, perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away...
<Carl Sagan> If you want to make a apple pie from scratch. You must first... invent the universe

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Optimizar variables
« Reply #5 on: February 19, 2009, 10:00:18 AM »

Buenas Maidnet,

si he entendido bien tu problemática con los diálogos creo que existe una solución muchísimo más óptima que el empleo de variables globales. Existen dos métodos en el objeto Game: AddResponceOnce y AddResponseOnceGame. El primero añade una respuesta que una vez ha sido seleccionada desaparece (y por tanto no se puede volver a seleccionar) hasta que salgas del diálogo. El segundo hace lo mismo pero la respuesta no volverá a aparecer nunca más en toda la partida.

Espero que esto te ayude.

Un saludo,

Jose
Logged

Maidnet

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 50
    • View Profile
Re: Optimizar variables
« Reply #6 on: February 19, 2009, 03:30:38 PM »

Ummm... la verdad es que es mucho más práctico, y me ahorraría muchas variables...

Lo voy a probar y ya cuento cosas.

Muchas gracias por el empujón ;)

P.D. : Jyujinkai, OK.
« Last Edit: February 19, 2009, 03:43:53 PM by Maidnet »
Logged

HelLRaiseR

  • I don't want to make a Monkey Island clone :(
  • Moderator
  • Frequent poster
  • *****
  • Karma: 4
  • Offline Offline
  • Posts: 270
    • View Profile
    • Adventure Box Studios
Re: Optimizar variables
« Reply #7 on: February 20, 2009, 11:30:25 AM »

Efectivamente esa es la solución si no quieres que te vuelva a aparecer la respuesta, te quitará bastante variables.

Yo hago cosas en los dialogos de tipo "Vuelveme a contar lo de" cuando ya se ha hecho la pregunta, la segunda vez lo pregunta de otra forma y se contesta de otra forma, eso lo hago con variables globales, algo parecido a lo que hace la plantilla con el StateScene.Visited, en principio creo que solo se puede hacer asi. Pero esto solo si queres que la pregunta aparezca siempre, pero de otra forma, para que se sepa que ya se ha hecho y por si el jugador no se acuerda de algo que ya habló con el personaje, en el caso de que no vuelva a aparecer AddResponseOnce o AddResponseOnceGame segun quieras en el juego o en el dialogo
Logged
Regards,

    Fernando

Maidnet

  • Occasional poster
  • **
  • Karma: 0
  • Offline Offline
  • Posts: 50
    • View Profile
Re: Optimizar variables
« Reply #8 on: March 23, 2009, 03:22:26 PM »

Buenas a todos,

Tras un tiempo dedicado a otros aspectos del juego, ahora estoy en el proceso de optimización de variables que comentaba hace un tiempo en este mismo hilo. He estado viendo la ayuda, pero no acabo de entender los comandos de los diálogos como el  Game.AddResponseOnce, Game.AddResponseOnceGame, Game.StartDlgBranch() , etc....

Por ejemplo, si yo tengo tres posibilidades de respuesta en una conversación, ¿como puedo hacer que una vez seleccionadas dos de ellas ejecute la tercera automáticamente sin utilizar marcadores "manuales" con variables globales?

Otro ejemplo: en una conversación hay varios niveles o "ramas". Conforme tengo yo programado ahora, tengo un marcador en cada respuesta "final", que se pone en "true" si seleccionas esa opción, y hace que desaparezca y no se pueda seleccionar de nuevo. Una vez todas las opciones han sido seleccionadas, la condición que había en el nivel anterior que decía que mientras hubiese alguno de los marcadores que no fuera "true" siguiese mostrando esa rama del diálogo, hace que ya no salga esa rama. ¿Como puedo hacer esto sin la utilización de variables globales con el fin de descargar lo máximo posible el juego?

Antes usaba variables globales independientes. Ahora he hecho una matriz con todos los valores dentro de una misma variable ¿Esto optimiza el funcionamiento del juego o es exactamente lo mismo usar 20 variables globales que una matriz global de 20 "casillas"?.

Perdón por la parrafada, pero es que tengo muchas dudas en este aspecto, pues una vez terminado el juego parece que el último gran escollo que me queda para darlo por finalizado es la puñetera optimización, pues como comentaba anteriormente el salvado y cargado de partidas se ralentiza mucho. También quisiera saber, si alguien tiene algo de idea, que otras cosas puedo hacer para optimizar y mejorar el script.

Muchísimas gracias por adelantado.
Logged

Jose

  • Regular poster
  • ***
  • Karma: 2
  • Offline Offline
  • Posts: 134
    • View Profile
Re: Optimizar variables
« Reply #9 on: March 24, 2009, 12:20:27 PM »


Por ejemplo, si yo tengo tres posibilidades de respuesta en una conversación, ¿como puedo hacer que una vez seleccionadas dos de ellas ejecute la tercera automáticamente sin utilizar marcadores "manuales" con variables globales?


Buenas Maidnet,
en teoría si le pasas el valor 'true' en la llamada al método Game.GetResponse() de la siguiente forma: Game.GetResponse(true), el motor de WME seleccionara de forma automática la única respuesta disponible cuando sólo haya una.



Otro ejemplo: en una conversación hay varios niveles o "ramas". Conforme tengo yo programado ahora, tengo un marcador en cada respuesta "final", que se pone en "true" si seleccionas esa opción, y hace que desaparezca y no se pueda seleccionar de nuevo. Una vez todas las opciones han sido seleccionadas, la condición que había en el nivel anterior que decía que mientras hubiese alguno de los marcadores que no fuera "true" siguiese mostrando esa rama del diálogo, hace que ya no salga esa rama. ¿Como puedo hacer esto sin la utilización de variables globales con el fin de descargar lo máximo posible el juego?


Si quieres pásame código en concreto y le echo un vistazo.

Un saludo.

Logged
 

Page created in 0.023 seconds with 22 queries.