hugoruscitti/pilas

View on GitHub
data/manual/gestor_de_escenas/index.html

Summary

Maintainability
Test Coverage
<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
  <title>Nuevo Gestor de Escenas - pilas-engine</title>
  

  
  <link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>

  <link rel="stylesheet" href="../css/theme.css" type="text/css" />
  <link rel="stylesheet" href="../css/custom.css" type="text/css" />
  <link rel="stylesheet" href="../css/theme_extra.css" type="text/css" />
  <link rel="stylesheet" href="../css/highlight.css">

  <script src="../js/jquery.min.js"></script>
  <script src="../js/modernizr.min.js"></script>
  <script type="text/javascript" src="../js/highlight.pack.js"></script>
  <script src="../js/theme.js"></script>

  <style>
    body {font-size: 90%;}
    pre, code {font-size: 100%;}
    h3, h4, h5, h6 {color: #2980b9; font-weight: 300}
  </style> 
</head>

<body class="wy-body-for-nav" role="document">

  <div class="wy-grid-for-nav">

    
    <nav data-toggle="wy-nav-shift" id='lateral' class="wy-nav-side stickynav">
      <div class="wy-side-nav-search">
        <a href=".."> pilas-engine</a>
      </div>

      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
      <ul class="current">
    
        
            <li class="toctree-l1 ">
                <a class="" href="../instalacion">Instalación</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../about">Acerca de ...</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../empezando">Empezando y los primeros pasos con pilas</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../actores">Actores</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../actores_personalizados">Actores personalizados</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../grupos">Grupos</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../colisiones">Colisiones</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../etiquetas">Etiquetas</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../fisica">Fisica</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../controles">Controles</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../joystick">Joystick</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../imagen">Imagen</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../sonidos">Sonidos</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../dibujado_simple_en_pantalla">Dibujado simple en pantalla</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../dibujado_avanzado_con_superficies">Dibujado avanzado con Superficies</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../tareas">Manejo de tiempo con tareas</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../interpolacion">Interpolaciones</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../controlando_la_pantalla">Controlando la pantalla</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../comportamientos">Comportamientos</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../escenas">Escenas</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../migrar_al_gestor_de_escenas">Como migrar mi juego al nuevo Gestor de Escenas</a>
            </li>
        

    
        
            <li class="toctree-l1 current">
                <a class="current" href=".">Nuevo Gestor de Escenas</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../demos">Demos</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../interfaz">Interfaz de usuario</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../menu">Como crear menúes para tu juegos</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../mapas_y_plataformas">Mapas y plataformas</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../dialogos">Diálogos</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../camara">Manejo de Cámara</a>
            </li>
        

    
        
        <span>Eventos</span>
            
                <li class="toctree-l1 ">
                    <a class="" href="../eventos">conexiones y respuestas</a>
                    
                </li>
            
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../texto">Textos</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../habilidades">Habilidades</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../depurando">Depurando</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../como_funciona_pilas_por_dentro">¿Cómo funciona pilas por dentro?</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../complementos">Complementos</a>
            </li>
        

    
        
            <li class="toctree-l1 ">
                <a class="" href="../desarrolladores">Guía para desarrolladores</a>
            </li>
        

    
</ul>

      </div>
      &nbsp;
    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

      
      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
        <i data-toggle="wy-nav-top" class="icon icon-reorder"></i>
        <a href=".."></a>
      </nav>

      
      <div class="wy-nav-content">
        <div class="rst-content">
          <div role="navigation" aria-label="breadcrumbs navigation">
  <ul class="wy-breadcrumbs">
    <li><a href=".." onclick='return alternar_menu();'>Docs</a> &raquo;</li>
    <li>Nuevo Gestor de Escenas</li>
      <li class="wy-breadcrumbs-aside">
        
      </li>
  </ul>
  <hr/>
</div>
          <div role="main">
            <div class="section">
              <h1 id="nuevo-gestor-de-escenas">Nuevo Gestor de Escenas</h1>
<p>Pilas contiene un nuevo gestor de escenas que permite tener más de una
escena en el juego, aunque sólo una de ellas será la activa.</p>
<p>Esta nueva funcionalidad nos permitiría, por ejemplo, estar jugando y en
cualquier momento pulsar una tecla y acceder a las opciones del juego.</p>
<p>Allí quitaríamos el sonido y luego pulsando otra tecla volveríamos al juego,
justo donde lo habíamos dejado.</p>
<p>Nuestros actores estarán en la misma posición y estado en el que los habíamos
dejado antes de ir a las opciones.</p>
<h2 id="escena-base">Escena Base</h2>
<p>Es la Escena de la cual deben heredar todas las escenas del juego en pilas.</p>
<pre><code>pilas.escena.Base
</code></pre>
<p>El <code>método antiguo</code> para crear una escena era el siguiente:</p>
<pre><code>class MiEscena(pilas.escenas.Escena):

    def __init__(self):
        pilas.escenas.Escena.__init__(self)

        pilas.fondos.Pasto()
        mono = pilas.actores.Mono()
</code></pre>
<p>Ahora el <code>método nuevo</code> para crear una escena es el siguiente:</p>
<pre><code>class MiEscena(pilas.escena.Base):

    def __init__(self):
        pilas.escena.Base.__init__(self)

    def iniciar(self):
        pilas.fondos.Pasto()
        mono = pilas.actores.Mono()
</code></pre>
<p>Como puedes observar, ahora la escena hereda de:</p>
<pre><code>pilas.escena.Base
</code></pre>
<p>Otro cambio <strong>muy importante</strong> es que el metodo <code>__init__(self)</code> no debe
contener nada más que la llamada al <code>__init__</code> de la escena Base.</p>
<pre><code>def __init__(self, titulo):
    pilas.escena.Base.__init__(self)

    self._titulo = titulo
    self._puntuacion = puntuacion
</code></pre>
<p>Puedes almacenar unicamente parámetros que quieras pasar a la escena.
Por ejemplo así:</p>
<pre><code>def __init__(self, titulo):
    pilas.escena.Base.__init__(self)

    self._titulo = titulo
</code></pre>
<p>Y por último debes definir un método <code>iniciar(self)</code> donde podrás crear los
nuevos actores y lo necesario para iniciar tu escena.</p>
<pre><code>def iniciar(self):
    pilas.fondos.Pasto()
    mono = pilas.actores.Mono()
    texti = pilas.actores.Texto(self._titulo)
</code></pre>
<h2 id="iniciar-pilas-con-una-escena">Iniciar pilas con una Escena</h2>
<p>Para iniciar pilas, con el nuevo sistema, debemos ejecutar lo siguiente</p>
<pre><code>pilas.cambiar_escena(mi_escena.MiEscena())
pilas.ejecutar()
</code></pre>
<p>Te habrás fijado que pilas dispone de un nuevo método para realizar esta
acción.</p>
<pre><code>pilas.cambiar_escena(escena_a_cambiar)
</code></pre>
<p>En el próximo punto explicarémos su función junto con otros 2 metodos nuevos.</p>
<h2 id="cambiar-entre-escenas">Cambiar entre Escenas</h2>
<p>Antes de nada debes comprender que pilas tiene la capacidad de apilar el número
de escenas que desees en su sistema.</p>
<p>El método de que se usa para "apilar" las escenas es FILO (First In, Last Out), la primera escena en
entrar en la pila será la última en salir.</p>
<p>¿Y como apilamos, recuperamos y cambiamos escenas?, muy sencillo.
Pilas dispone de 3 métodos para realizar esta operaciones:</p>
<pre><code>pilas.cambiar_escena(mi_escena)

pilas.almacenar_escena(mi_escena)

pilas.recuperar_escena()
</code></pre>
<ul>
<li>
<p><code>pilas.cambiar_escena(mi_escena)</code>: VACIA por completo la pila de escenas del sistema e incorporar la escena que pasamos como parámetro. La escena incorporada será la escena activa.</p>
</li>
<li>
<p><code>pilas.almacenar_escena(mi_escena)</code>: apila la escena actual y establece como escena activa la que le pasamos como parámetro. La escena que ha sido apilada quedará pausada hasta su recuperación.</p>
</li>
<li>
<p><code>pilas.recuperar_escena()</code>: recupera la última escena que fué apilada mediante <code>alamacenar_escena()</code> y la establece como escena activa.</p>
</li>
</ul>
<p>Por último indicar que si quieres tener acceso a la escena actualmente activa, puedes hacerlo mediante el comando:</p>
<pre><code>pilas.escena_actual()
</code></pre>

            </div>
          </div>
          <footer>

  
    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
      
        <a href="../demos" class="btn btn-neutral float-right" title="Demos"/>Siguiente <span class="icon icon-circle-arrow-right"></span></a>
      
      
        <a href="../migrar_al_gestor_de_escenas" class="btn btn-neutral" title="Como migrar mi juego al nuevo Gestor de Escenas"><span class="icon icon-circle-arrow-left"></span> Anterior</a>
      
    </div>
  

  <hr/>

  <div role="contentinfo">
    <p>
    <!-- Copyright etc -->
    </p>
  </div>

  Creado con <em>MkDocs</em>.


  <script>
  $(document).ready(function() {
     $('img').each(function(elemento) {
        if (this.src.indexOf('github.io') > 0) {
          this.src = this.src.replace('github.io/imagenes', 'github.io/pilas-manual/imagenes');
        }
     });
  });
  </script>

  <script>
  $(document).ready(function() {
    String.prototype.endsWith = function(suffix){
      return this.indexOf(suffix, this.length - suffix.length) !== -1;
    };

    $('a').each(function(){
      var x=this.href;

      if (!this.href.endsWith('html') && this.href.indexOf('#') < 0) {
        if (this.href.endsWith('/')) {
          this.href = this.href + "index.html";
        } else {
          this.href = this.href + "/index.html";
        }
      }
    });
  });
  </script>


  <script>
    function alternar_menu() {
      var left = parseInt($('#lateral').css('left'), 10);

      if (left !== 0) {
        $('#lateral').css('left', '0px');
        return false;
      }

    }
  </script>

  <style>
    .rst-versions {
      border: 0 !important;
    }
    .wy-nav-side {
      padding-bottom: 50px;
    }
    .wy-nav-content-wrap {
      background-color: white !important;
    }

    .wy-nav-content {
      background-color: white !important;
    }
  </style>


</footer>
      
        </div>
      </div>

    </section>

  </div>

</body>
</html>