Liberar objetos scripts de memoria (lingoAvanzado)

En una parte de mi película Director 8, creo en tiempo de ejecución objetos de un guion padre, el cual sirve para colocar miembros en el stage y asignarles un comportamiento especial.
Tengo una función lingo que debe liberar los sprites y los comportamientos asignados a él, dejando el miembro "usable" para otro objeto. Digamos que lo que había creado y asignado antes ya no me sirve de nada y NO estoy seguro de si se borra de la memoria los objetos del comportamiento y de los guiones padre, aunque funcionar funciona bien.
Para ello hago lo siguiente:
On eliminarElementoScript handlerX
handlerX.pSprite.scriptInstanceList= []
handlerX.pSprite.member = 0
handlerX = 0 --hace falta, creo q no hace nada???
end
Siendo el handlerX un "me" de un objeto padre instanciado. PSprite es la propiedad del script padre, donde se recuerda el sprite al cual ha sido asignado.
No se si mi jerga de lingo te resultará comprensible, he creído que sería descriptiva.
Ruego contestes

1 Respuesta

Respuesta
1
Los objetos hijos que vayas creando se van acumulando sucesivamnete en la RAM de director hasta que nos desagamos de ellos de manera específica. Director se deshará de ciertos objetos en detemnadas cincunstancias, como por ejemplo en la creación de un objeto que ya existía, pero lo cierto es que lo mejor es eliminar los objetos según veas que ya no los necesitas. Acumular demasiados objetos puede tener un efecto negativo en la reproducción, aminorando su marcha. Y lo que puede ser peor provocar un conflicto interno. Además como sabrás los objetos perduran en el cambio de películas y sólo se borrarán cualdo salgas de la aplicación (o cieres macromedia director si estás en modo autor) o los mates tu mismo poniendo el valor 0 o void a dichos hijos.
Era la respuesta que necesitaba, solo necesito una aclaración:
Se supone que es la sentencia
handlerX = 0
la que "borra" el objeto. En cambio, solo obtuve resultados en pantalla cuando incorporé:
handlerX.pSprite.scriptInstanceList= []
¿Por qué es necesaria esta asignación, si el objeto de todas formas no va a existir?
Gracias por responder, Nando
Te lo explico con un ejemplo mio.
He creado un ancestor que coloca una imagen en el stage cuando se crea el objeto. El padre con la rutina stepframe lo que hace es moverlo cada frame.
Los objetos los creo al actorlist.
Bien pues si pongo esto en la ventana message después de haber creado unos cuantos objetos:
the actorList = []
¡Lo que pasa es que de repente todos los objetos se paran pero no desaparecen!
Esto es debido a que el objeto si ha desaparecido de la memoria pero no el sprite. Una cosa es el objeto y otra son los elementos de los sprites.
Necesito hacer esto para borrarlos del stage (de la la memoria ya los he borrado con "the actorList = []")
sprite(2).member=0
Es decir si los objetos llevan asociado algún miembro del stage ese miembro ocupa un canal del stage aunque ese canal tu lo veas vacío desde la ventana score.
En resumen sólo puedes crear 999 objetos asociados a miembros.
Lo que creo es que no desparecen por :
handlerX.pSprite.scriptInstanceList= []
sino por esto
handlerX.pSprite.member = 0
Dime si es esto o ponme todo el código y te lo miro.
Muchas gracias por tu respuesta, me ha servido bastante. No te paso el código para no hacerte perder el tiempo más, pues ya va bien.
No he usado ni actorlist ni ancestor, solo asigno nuevos objetos de un comportamiento en un guion padre; vamos, que en vez de arrastrarlos y asignarlos, lo hago mediante lingo. Por eso, para asegurarme de que se borran todos los objetos, hago handlerX.pSprite. scriptInstanceList = 0, para cada i.
Lo de scriptInstanceList= [] era por la especial codificación de los comportamientos, que usan esta propiedad para realizar operaciones.
A pesar de la posible ambigüedad de mis preguntas, has resuelto mis dudas. Gracias y hasta la próxima.
Nando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas