Cómo descartar SKScene?

Cuando estoy acabado con mi SKScene hay una manera de despedir el SKScene desde dentro de mi SKScene clase?

Si no en mi Viewcontroller donde presento mi SKScene [skView presentScene:theScene]; hay una manera de reiniciar la escena o quitar de mi SKView?

La SKScene De Referencia De La Clase y SKView De Referencia De La Clase no son de gran ayuda.

Actualización:

El código siguiente elimina mi escena de mi SKView [yourSKView presentScene:nil]; pero cuando estoy de vuelta en mi controlador de vista de la escena todavía se está ejecutando en segundo plano. Siempre se puede hacer una pausa cuando el juego ha terminado y estoy enviados de vuelta a mi punto de vista controlador(menú), pero me pregunto ¿hay otro método que otros luego de detenerla como quitar completamente?

-(void)endTheGame {
    [highscoreLabel removeFromSuperview];
    NSLog(@"Game Over");
   //would like to end here before calling the below method in my view controller
    [self.delegate mySceneDidFinish:self];
}
desestimar el controlador de vista? Después de todo, si usted ya no desea presentar una escena que puede (y debe) acaba de acabar con la SKView por completo.
¿Has conseguido solucionarlo? Tengo el mismo problema.. No se puede ir de nuevo a la vista del controlador de la escena
Usted no puede ir de «Volver al Controlador de Vista» de una escena. La escena es una Vista, el controlador de vista de los controles y pantallas vistas. Utilice el controlador de vista para cambiar de vista. Recuerde que el controlador de vista de sí mismo no es una opinión.

OriginalEl autor 4GetFullOf | 2014-02-20

6 Kommentare

  1. 12

    Encuentro con un problema similar que me topé en torno a su pregunta, y ya que nadie dio una respuesta decente he aquí cómo he resuelto:

    1. en mi escena me llamó ambas líneas
    [self removeFromParent];
    [self.view presentScene:nil];
    1. en mi controlador de (el controlador que muestra el SKScene) he cambiado el código de la plantilla de Apple, que fue la creación y presentación de mi escena de viewDidLoad con el fin de crear y presentar mi escena en viewWillAppear, sólo si la vista de la escena es nula

    aquí está mi código Swift, incluso si usted está usando Objective C vas a entender lo que hace; la clave de la línea de ser el «si skView.escena == nil» test :

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
    
        let skView = self.view as SKView
        if skView.scene == nil {
            let scene = GameScene(size:skView.bounds.size)
            scene.controller = self
            skView.ignoresSiblingOrder = true
            scene.scaleMode = .AspectFill
            skView.presentScene(scene)
        }
    }
    PS. si usted está de acuerdo con mi solución siéntase libre de marca como el aceptado respuesta.
    Esta respuesta debería ser marcado como correcto.
    Si su respuesta fue menos confuso sería de gran ayuda. Tiene una mezcla de swift y c objetivo. No estoy seguro de que sus fragmentos de código de acuerdo con tu texto. Usted menciona controlador de vista, pero muestran una rutina de la escena del juego? En mi caso, me puse dos puntos de interrupción en el controlador de vista, uno en viewdidload y el otro en viewwillappear. Tanto éxito en la partida, pero ni el éxito después de que el método que utilizó en la escena del juego en el paso 1.

    OriginalEl autor Alex

  2. 11

    Puede utilizar:

     [yourSKView presentScene:nil];

    para eliminar de la escena.

    impresionante sí que quita la escena desde mi skview pero cuando soy redirigido a el menú de la escena todavía se está ejecutando en segundo plano? Otro luego de la pausa de la escena cuando el juego es más ¿hay algún otro método?
    Es el menú en la vista principal de la controladora? Puedes publicar el código que uso para ir al menú?
    Sí, el menú es el padre de controlador de vista
    Cómo es que aún se ejecuta si se han establecido a cero? Ha considerado poner el menú en una vista separada de la controladora? Así VC1 tiene el menú que se puede llamar VC2 que alberga la SKScene. Cuando el juego es más, tiene VC1 descartar VC2
    Yo prefiero usar dos VCs, se da un mejor control y las garantías de su SKScene será eliminado, junto con su uso de memoria. Usted todavía puede usar VC2 para pausar el juego, pero si quieres quitarlo, uso VC1. También me suelo poner un menú en el SKScene sí, con funciones como pausa para reiniciar.

    OriginalEl autor AndyOS

  3. 4

    «No se puede ir de «Volver al Controlador de Vista» de una escena. La escena es una Vista, el controlador de vista de los controles y pantallas vistas. Utilice el controlador de vista para cambiar de vista. Recuerde que el controlador de vista no es en sí un punto de vista». -Wharbio

    Mejor solución es crear otra Vista Controlador. Este punto de vista controlador será mi menú. A continuación, el otro viewcontroller actuará como anfitrión de la skscene.

    En mi situación que me haga uso de mi menú viewcontroller para despedir el viewcontroller, mostrando en el skview.

    No hay otra manera. Si yo hago como que tengo un montón de memoria de advertencias y de vez en cuando mi juego se bloquea?

    OriginalEl autor 4GetFullOf

  4. 2

    Desde dentro de su SKScene, usted puede simplemente hacer [self.view presentScene:aNewScene] presentar otra escena

    que parece estar todos en la solución de mi búsqueda de esta respuesta. pero esto no es lo que quiero. Quiero volver al menú (que he conseguido ya) en mi punto de vista controlador. El que, probablemente, es cuando estoy de vuelta en mi menú y haz clic en el botón para iniciar el juego de nuevo y el presente de la escena en el mismo lugar exacto lo dejó. Hense la razón por la que necesita de alguna manera cerrar o reiniciar la escena.
    Está usted seguro de que son la presentación de una nueva escena, me.e por la realización de alloc / init, y no que exista una escena guardada en un ivar ?

    OriginalEl autor Yaman

  5. 2

    Estoy completamente de quitar escenas utilizando este bloque en mi punto de vista controlador:
    Obviamente, usted tendrá que declarar su Tamaño, y «newSKview»

    SKView * skView = (SKView *)self.view;
    
    SKScene *newScene = [[newSKView alloc]initWithSize:size];
    newScene.scaleMode = SKSceneScaleModeAspectFill;
    SKScene *oldScene=(skView.scene);
    [oldScene removeFromParent];
    [skView presentScene:newScene];

    Esto funciona muy bien para mí. Ninguno de mis Escenas son retenidos o fuerte.

    OriginalEl autor Wharbio

  6. -3

    Tal vez mi variante será útil:

    [[self.scene childNodeWithName:@"YourChildNodeName"] removeFromParent];
    El OP está preguntando cómo quitar escenas, no de los nodos

    OriginalEl autor Romchas

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea