hugoruscitti/pilas

View on GitHub
data/manual/fisica/index.json

Summary

Maintainability
Test Coverage
{
    "content": "<h1 id=\"fisica\">F\u00edsica</h1>\n<p>Pilas incluye integraci\u00f3n con un sistema de f\u00edsica\npara realizar simulaciones y dotar a tus juegos\nde mas realismo y diversi\u00f3n.</p>\n<h2 id=\"el-motor-box2d\">El motor: Box2D</h2>\n<p>El motor de f\u00edsica seleccionado para pilas se llama Box2D, el mismo\nmotor de f\u00edsica utilizado en el juego Angry Birds.</p>\n<p>As\u00ed, Box2D y PyBox2D son las bibliotecas protagonistas\nde casi toda la funcionalidad que vas a ver en este m\u00f3dulo.</p>\n<p>El m\u00f3dulo <code>pilas.fisica</code> es solamente un facilitador para utilizar Box2D, y\nque puedas comenzar a jugar con f\u00edsicas r\u00e1pidamente.</p>\n<p>As\u00ed que aprovecho este espacio para dar las gracias a <strong>Erin Catto</strong>, y\nsu grupo de desarrollo por haber creado <strong>Box2D</strong>.</p>\n<h2 id=\"unos-ejemplos\">Unos ejemplos</h2>\n<p>El motor de f\u00edsica se puede mostrar en funcionamiento\nusando un ejemplo, escribe el siguiente c\u00f3digo:</p>\n<pre><code>pelotas = pilas.actores.Pelota() * 10\n</code></pre>\n\n<p>esto crear\u00e1 un grupo de circunferencias que rebotar\u00e1n\nhasta la parte inferior de la pantalla.</p>\n<p>De manera similar puedes crear un mont\u00f3n de cajas y\nhacerlas rebotar:</p>\n<pre><code>cajas = pilas.actores.Caja() * 10\n</code></pre>\n\n<p>Como puedes ver, el resultado es un grupo ca\u00f3tico\nde actores chocando entre s\u00ed. Mas adelante veremos\ncomo personalizar y \"controlar\" un poco el escenario.</p>\n<p><img alt=\"\" src=\"../imagenes/fisica/fisica.png\" /></p>\n<p>Los actores que tienen f\u00edsica son un poco particulares, pero\na\u00fan as\u00ed se los puede tratar como a otros actores. Por\nejemplo, si quieres poder arrastrar y soltar figuras con\nel mouse, puedes ense\u00f1arles una habilidad:</p>\n<pre><code>pelotas.aprender(&quot;arrastrable&quot;)\ncajas.aprender(&quot;arrastrable&quot;)\n</code></pre>\n\n<h2 id=\"modo-depuracion-de-fisica\">Modo depuraci\u00f3n de f\u00edsica</h2>\n<p>Cuando haces juegos con f\u00edsica o movimientos realistas es\nmuy importante tener en cuenta un concepto importate:</p>\n<p>Si bien uno observa pelotas y cajas, en realidad, internamente\nson solo cuadrados y circunferencias.</p>\n<p>Lo que ocurre en pantalla son dos cosas, por una lado vemos im\u00e1genes\ncon aspecto de caja o pelota, y por el otro se nos oculta una\nsimulaci\u00f3n entre pol\u00edgonos mucho mas primitiva y simple.</p>\n<p>Observa esta escena:</p>\n<p><img alt=\"\" src=\"../imagenes/fisica/fisica_1.jpg\" /></p>\n<p>Cada uno de esos actores est\u00e1 asociado a una figura\ngeom\u00e9trica, la f\u00edsica en realidad se da en un nivel muy\nprimitivo de figuras. El aspecto de las cosas es\nsolo eso, un aspecto. Lo que \"manda\" en el comportamiento\nf\u00edsico son las figuras geom\u00e9tricas (cuerpos).</p>\n<p>Intenta lo siguiente, pulsa la tecla <strong>F11</strong> y observar\u00e1s\nvarias lineas de color rojo indicando las figuras de\nlos cuerpos:</p>\n<p><img alt=\"\" src=\"../imagenes/fisica/fisica_2.jpg\" /></p>\n<p>Las lineas rojas indican pol\u00edgonos que el\nmotor de f\u00edsica puede controlar, las cajas tienen forma\nrectangular, los actores Pelota tienen figuras circulares, y\nel suelo y las paredes tambi\u00e9n est\u00e1n en el sistema de f\u00edsica.</p>\n<p>Si por alg\u00fan motivo quieres que los objetos no est\u00e9n contenidos\nen la pantalla, y sean un poco mas libres, podr\u00edas eliminar\nlas paredes:</p>\n<pre><code>pilas.fisica.eliminar_paredes()\n</code></pre>\n\n<p>o incluso podr\u00edas eliminar el suelo:</p>\n<pre><code>pilas.fisica.eliminar_suelo()\n</code></pre>\n\n<p>Pero recuerda que los objetos que no se ven en la pantalla\nde todas maneras estar\u00e1n ah\u00ed. Una buena idea es eliminarlos\nni bien los dejas de usar.</p>\n<h2 id=\"fisica-personalizada\">F\u00edsica personalizada</h2>\n<p>Los actores <code>Pelota</code> y <code>Caja</code> est\u00e1n bien para simulaciones\nsimples y generales. Pero, \u00bfc\u00f3mo podemos dotar a nuestros\npropios actores de ese comportamiento?.</p>\n<p>Los objetos o figuras f\u00edsicas viven dentro del m\u00f3dulo de f\u00edsica\ny son invisibles (al principio), pero luego se pueden vincular\na cualquier actor con facilidad.</p>\n<p>Intenta lo siguiente, ingresa en el modo interactivo de pilas\ny pulsa la tecla <strong>F11</strong>. Tendr\u00edas que ver el texto\n\"F11 ModoFisica habilitado.\"\nen la esquina superior de la ventana:</p>\n<p><img alt=\"\" src=\"../imagenes/fisica/fisica_personalizada_1.jpg\" /></p>\n<p>Ahora genera dos figuras f\u00edsicas, una circunferencia est\u00e1tica\ny otra din\u00e1mica:</p>\n<pre><code>circulo = pilas.fisica.Circulo(0, 0, 50, dinamica=False)\ncirculo_dinamico = pilas.fisica.Circulo(10, 200, 50)\n</code></pre>\n\n<p>El primer c\u00edrculo aparecer\u00e1 en el centro de la ventana, y el\nsegundo comenzar\u00e1 en la posici\u00f3n <code>(10, 200)</code>, es decir,\nen la parte superior de la ventana y luego caer\u00e1\nrebotando. Algo as\u00ed:</p>\n<p><img alt=\"\" src=\"../imagenes/fisica/fisica_personalizada_2.jpg\" /></p>\n<p>Ahora bien, habr\u00e1s notado que estas dos circunferencias las\npodemos ver porque est\u00e1 habilitado el m\u00f3dulo de depuraci\u00f3n (que\nactivamos con <strong>F11</strong>), pero esto no lo va a ver alguien que juegue\na nuestro juego. El modo depuraci\u00f3n es solo para desarrolladores.</p>\n<p>Lo que nos falta hacer, es darles apariencia a esas figuras. Algo\nas\u00ed como una piel..</p>\n<p>Para esto podemos usar actores. La din\u00e1mica es as\u00ed, tenemos que\ncrear dos actores, y luego decirle a estos actores que se comporten\nc\u00f3mo figuras geom\u00e9tricas.</p>\n<p>Agreguemos a nuestro programa estas 4 lineas de c\u00f3digo, queremos\nque el primer circulo (el del centro) sea un mono, y el otro\nc\u00edrculo que sea una bomba:</p>\n<pre><code>mono = pilas.actores.Mono()\nmono.aprender(pilas.habilidades.Imitar(circulo))\n\nbomba = pilas.actores.Bomba()\nbomba.aprender(pilas.habilidades.Imitar, circulo_dinamico)\n</code></pre>\n\n<p>Esto es diferente a lo anterior, los objetos f\u00edsicos ahora\ntienen apariencia:</p>\n<p><img alt=\"\" src=\"../imagenes/fisica/fisica_personalizada_3.jpg\" /></p>\n<p>Ahora podr\u00edamos desactivar el modo depuraci\u00f3n f\u00edsica (pulsando\nnuevamente <strong>F11</strong>) y jugar un poco impulsando la bomba de un\nlado a otro:</p>\n<pre><code>circulo_dinamico.y = 200\n</code></pre>\n\n<p>Ten en cuenta que ahora la figura del motor f\u00edsico es la\nque determina el movimiento y la rotaci\u00f3n, as\u00ed que ya no\nfuncionar\u00e1 escribir algo c\u00f3mo <code>bomba.y = 200</code>, ahora tienes\nque escribir <code>circulo_dinamico.y = 200</code> para mover al actor...</p>\n<p>Otra cosa a considerar, es que en nuestro ejemplo no ajustamos\nmuy bien el tama\u00f1o del <code>circulo_dinamico</code> con el de la\nbomba. Esto es un detalle poco relevante aqu\u00ed, porque solo\nquiero explicar c\u00f3mo se usa el motor, pero cuando hagas tus\njuegos, recuerda usar el modo depuraci\u00f3n de f\u00edsica para detectar\nestos detalles y corregirlos, son muy importantes para que\ntus usuarios disfruten del juego. Recuerda que ellos no\nver\u00e1n los c\u00edrculos rojos... solo ver\u00e1n la apariencia\nde los actores.</p>\n<h2 id=\"escala-real-y-tamano-de-figuras\">Escala real y tama\u00f1o de figuras</h2>\n<p>Pilas utiliza una pantalla que se puede medir en pixels, de hecho, todas\nlas im\u00e1genes tienen un tama\u00f1o en pixels predefinido.</p>\n<p>Pero dentro del mundo f\u00edsico de box2d, las figuras no tienen tama\u00f1o en pixels\nsino en metros.</p>\n<p>\u00bfCual es la relaci\u00f3n?, pilas convierte pixels a metros para mantener al mundo\nde box2D en coherencia con lo que estamos viendo en pantalla.</p>\n<p>30 pixels son equivalentes a 1 metro:</p>\n<p><img alt=\"\" src=\"../imagenes/fisica/escalas.png\" /></p>\n<h2 id=\"cambiando-la-gravedad-interactivamente\">Cambiando la gravedad interactivamente</h2>\n<p>Por defecto, la gravedad del escenario es de (0, -90), esto\nsignifica que los objetos \"caen\" hacia abajo, y lo hacen con\nuna aceleraci\u00f3n de 90 mts/s^2 (metros sobre segundos cuadrados).</p>\n<p>Pero no est\u00e1s obligado a que esto sea siempre as\u00ed, de hecho\nsi quieres hacer un juego que transcurra en el espacio seguramente\nvas a querer eliminar por completo la gravedad del escenario\npara que los objetos puedan \"flotar\", \u00bfno?.</p>\n<p>Entonces, hay dos formas de cambiar la gravedad del escenario. Podr\u00edas\ncambiar la gravedad en cualquier momento invocando a la funci\u00f3n\n<code>definir_gravedad</code> indicando la nueva gravedad, por ejemplo:</p>\n<pre><code>pilas.fisica.definir_gravedad(200, 0)\n</code></pre>\n\n<p>o directamente especificar la gravedad usando las variables <code>x</code> e\n<code>y</code>:</p>\n<pre><code>pilas.fisica.gravedad_x = 90\npilas.fisica.gravedad_y = 90\n</code></pre>\n\n<p>Ten en cuenta que el primer argumento es la aceleraci\u00f3n horizontal y\nla segunda componente es la aceleraci\u00f3n vertical. Los valores originales\nde la gravedad son <code>0</code> y <code>-90</code>.</p>\n", 
    "url": "/fisica/", 
    "language": "en", 
    "title": "Fisica"
}