¿Deteniendo el sonido en el método -onExit del niño?

Tengo tres clases, llamémoslas A, B y C. La clase A tiene una clase CCLayer agregada llamada B. B también tiene agregada una CCLayer secundaria, llamada C. Ahora, C reproduce un efecto de sonido que me gustaría detener cuando la escena Se reemplaza A. Asumí que si la escena A se reemplaza llamando a -replaceScene, todos sus hijos también se eliminarán y limpiarán. Así que traté de poner mi pieza de código que debería detener el sonido en el método -onExit de la clase C. Sin embargo, nunca se llama a -onExit en ninguno de los elementos secundarios de la escena reemplazada. ¿Por qué es eso y cómo puedo resolver esto?

Todos los métodos (detener el sonido, etc.) funcionan, simplemente no sé dónde llamarlos. La situación es básicamente la siguiente: estoy en mi escena principal y si toco el botón "menú principal", quiero que sus hijos dejen de reproducir cualquier sonido. ¿Cómo saben los niños que sus padres van a ser liberados?

preguntado el 27 de julio de 12 a las 15:07

1 Respuestas

Si onExit no se llama para un nodo, significa que no se eliminó de la jerarquía de la escena. Esto apunta a una pérdida de memoria, específicamente un ciclo de retención. Puede confirmar esto estableciendo un punto de interrupción en el método dealloc de CCScene. Si no se golpea al cambiar de escena, está filtrando la escena.

Respondido 27 Jul 12, 17:07

Pero los objetos cclayer son objetos de liberación automática, por lo que no debería haber ningún problema, ¿verdad? Por lo general, llamo a -node o -alloc -initwithsomething -autorelease que debería hacer el trabajo correctamente. Sin embargo, es un misterio para mí por qué -onExit no se llama... - el crítico

La opción -dealloc el método no se llama en absoluto. Qué podría ser la causa ? - el crítico

-onEnter también parece aumentarlo en 1... ¿Por qué es eso y qué puedo hacer al respecto? - el crítico

bien, lo descubrí. Tuve que poner [super onExit] en mi método -onExit para desasignar la clase, lo que me parece muy extraño... ¿Podría explicar por qué? - el crítico

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.