# Tu primer script

Escribe un script corto en Lua que dibuja un sol, ejecútalo, deshazlo y guárdalo.

_Los atajos están escritos para Windows y Linux. En un Mac, usa ⌘ Cmd donde dice Ctrl y ⌥ Option donde dice Alt._

Los scripts son pequeños programas en Lua que dibujan y editan tu sprite por ti: todo lo que puedes
hacer con las herramientas, un script lo puede hacer con código. Aquí vas a escribir uno que dibuja
un sol en una capa nueva. Lleva unos cinco minutos, y no necesitas haber programado antes.

## Crear un script

Abre un sprite (uno nuevo de 32×32 sirve) y elige Scripts > Nuevo script.... Ponle al script el nombre
"Sun" y pulsa **Crear**.

Se abre el panel **Scripts** con unas líneas de comentario (líneas que empiezan con `--`, que Lua
ignora). Tiene un editor de código, una barra de herramientas arriba y un área de salida abajo. En la
disposición predeterminada se acopla a la derecha del lienzo, así que puedes ver ambos a la vez
(puedes moverlo como cualquier panel: consulta [El espacio de trabajo](https://pxstud.io/es/docs/manual/guides/workspace.md)).

![El panel Scripts mostrando el código del script Sun, con los botones Ejecutar, Guardar borrador y Publicar arriba y la línea que imprimió en el área de salida debajo](https://pxstud.io/scripting/images/first-script-panel.light.webp)

_El panel Scripts con el script del sol, después de ejecutarlo_

## Escríbelo

Reemplaza los comentarios con esto:

```lua
-- Draws a sun on a new layer.
local layer = app.addLayer("Sun")
local frame = app.getActiveFrameId()
local w, h = app.getCanvasWidth(), app.getCanvasHeight()
local cx, cy = w // 2, h // 2
local r = math.min(w, h) // 4

-- the rays: eight short lines around the middle
for i = 0, 7 do
  local a = i * math.pi / 4
  app.drawLine(layer, frame,
    cx + math.floor(math.cos(a) * (r + 2) + 0.5), cy + math.floor(math.sin(a) * (r + 2) + 0.5),
    cx + math.floor(math.cos(a) * (r + 5) + 0.5), cy + math.floor(math.sin(a) * (r + 5) + 0.5),
    { color = "#f4a52e" })
end

-- the disc
app.drawEllipse(layer, frame, cx - r, cy - r, cx + r, cy + r, { color = "#ffd34e", fill = "filled" })
print("Drew a sun " .. (r * 2 + 1) .. " pixels across.")
```

Qué hace:

- `app.addLayer` añade una capa llamada "Sun" y devuelve su id; `app.getActiveFrameId` devuelve el
  fotograma en el que estás. Todos los comandos de dibujo reciben una capa y un fotograma, igual que
  una herramienta pinta en la capa activa en el fotograma actual.
- `app.getCanvasWidth` y `app.getCanvasHeight` leen el tamaño del sprite, así que el sol cabe en
  cualquier lienzo. Las coordenadas son píxeles, con (0, 0) en la esquina superior izquierda.
- `app.drawLine` y `app.drawEllipse` funcionan exactamente como las herramientas Línea y
  Elipse. Todo lo que no pases (aquí, el pincel) sale de los ajustes de la herramienta actual.
- `print` escribe una línea en el área de salida.

Mientras escribes, el editor sugiere funciones de `app.`; señala una para leer qué hace.

## Ejecútalo

Pulsa **Ejecutar** (el botón de reproducir) en la barra de herramientas del panel. El área de salida
dice "Drew a sun 17 pixels across.", y la línea de tiempo tiene una capa nueva, "Sun", con el sol en
el lienzo junto al panel.

Si algo falla, el área de salida muestra el error y se resalta la línea donde ocurrió. Corrígelo y
vuelve a ejecutar.

## Deshazlo

Todo lo que cambia una ejecución es **un solo paso de deshacer**: pulsa `Ctrl+Z` y la capa y el sol
desaparecen juntos. Cambia un color o el `+ 5` que define la longitud de los rayos, y ejecútalo de
nuevo.

## Guárdalo

Pulsa **Guardar borrador** (el botón del disquete). El script se guarda en este navegador, igual que
tus sprites, y un `*` después de su nombre en el panel indica cambios sin guardar. Para abrirlo de
nuevo más tarde, elige Scripts > Abrir mi script...; los últimos cinco scripts que abriste también aparecen
justo debajo en el menú Scripts.

**Publicar** comparte un script en la biblioteca de scripts; necesita una cuenta con Sync (consulta
[la guía de scripting](https://pxstud.io/es/docs/scripting/guide.md#saving-and-publishing)).

## Siguientes pasos

- [La guía de scripting](https://pxstud.io/es/docs/scripting/guide.md) explica cómo ejecutar, detener, las ventanas de script, los
  comandos de script y los generadores oficiales.
- La [API de scripting](https://pxstud.io/es/docs/scripting.md) lista todas las funciones de `app.`, agrupadas por lo que
  hacen: [dibujo](https://pxstud.io/es/docs/scripting/drawing.md), [capas](https://pxstud.io/es/docs/scripting/layers.md),
  [fotogramas](https://pxstud.io/es/docs/scripting/frames.md), [matemáticas del color](https://pxstud.io/es/docs/scripting/color.md) y más.
