# Il tuo primo script

Scrivi un breve script Lua che disegna un sole, eseguilo, annullalo e salvalo.

_Le scorciatoie sono scritte per Windows e Linux. Su Mac, usa ⌘ Cmd dove c'è scritto Ctrl e ⌥ Option per Alt._

Gli script sono piccoli programmi Lua che disegnano e modificano lo sprite al posto tuo: tutto
quello che puoi fare con gli strumenti, uno script lo può fare con il codice. Qui vediamo come
scriverne uno che disegna un sole su un nuovo livello. Richiede circa cinque minuti, e non serve
aver mai programmato.

## Crea uno script

Apri uno sprite (va bene uno nuovo da 32×32) e scegli Script > Nuovo script.... Dai allo script il nome
"Sun" e premi **Crea**.

Si apre il pannello **Script** con alcune righe di commento (righe che iniziano con `--`, che Lua
ignora). Ha un editor di codice, una barra degli strumenti in alto e un'area di output in basso.
Nel layout predefinito è ancorato a destra della tela, così vedi entrambi insieme (puoi spostarlo
come qualsiasi pannello: vedi [L'area di lavoro](https://pxstud.io/it/docs/manual/guides/workspace.md)).

![Il pannello Script con il codice dello script Sun, con i pulsanti Esegui, Salva bozza e Pubblica in alto e la riga stampata nell'area di output sotto](https://pxstud.io/scripting/images/first-script-panel.light.webp)

_Il pannello Script con lo script del sole, dopo l'esecuzione_

## Scrivilo

Sostituisci i commenti con questo:

```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.")
```

Cosa fa:

- `app.addLayer` aggiunge un livello chiamato "Sun" e ne restituisce l'id; `app.getActiveFrameId`
  restituisce il fotogramma in cui ti trovi. Ogni comando di disegno richiede un livello e un
  fotogramma, come uno strumento dipinge sul livello attivo nel fotogramma corrente.
- `app.getCanvasWidth` e `app.getCanvasHeight` leggono le dimensioni dello sprite, così il sole sta
  in qualsiasi tela. Le coordinate sono in pixel, con (0, 0) nell'angolo in alto a sinistra.
- `app.drawLine` e `app.drawEllipse` funzionano esattamente come gli strumenti Linea e
  Ellisse. Tutto ciò che non passi (qui, il pennello) viene dalle impostazioni correnti dello
  strumento.
- `print` scrive una riga nell'area di output.

Mentre scrivi, l'editor suggerisce le funzioni `app.`; punta il cursore su una per leggere cosa fa.

## Eseguilo

Premi **Esegui** (il pulsante play) nella barra degli strumenti del pannello. L'area di output dice
"Drew a sun 17 pixels across.", e la timeline ha un nuovo livello, "Sun", con il sole sulla tela
accanto al pannello.

Se qualcosa non va, l'area di output mostra l'errore e la riga in cui è avvenuto viene evidenziata.
Correggilo ed esegui di nuovo.

## Annullalo

Tutto ciò che un'esecuzione modifica è **un solo passo di annullamento**: premi `Ctrl+Z` e il
livello e il sole spariscono insieme. Cambia un colore o il `+ 5` che imposta la lunghezza dei
raggi, ed esegui di nuovo.

## Salvalo

Premi **Salva bozza** (il pulsante disco). Lo script viene salvato in questo browser, come i tuoi
sprite, e un `*` dopo il suo nome nel pannello indica modifiche non salvate. Per riaprirlo più
tardi, scegli Script > Apri il mio script...; anche gli ultimi cinque script aperti sono elencati subito sotto
nel menu Script.

**Pubblica** condivide uno script nella libreria di script; serve un account con Sync (vedi
[la guida allo scripting](https://pxstud.io/it/docs/scripting/guide.md#saving-and-publishing)).

## Passi successivi

- [La guida allo scripting](https://pxstud.io/it/docs/scripting/guide.md) copre esecuzione, arresto, finestre degli script, comandi
  degli script e i generatori ufficiali.
- La [API di scripting](https://pxstud.io/it/docs/scripting.md) elenca ogni funzione `app.`, raggruppata per ciò che fa:
  [disegno](https://pxstud.io/it/docs/scripting/drawing.md), [livelli](https://pxstud.io/it/docs/scripting/layers.md),
  [fotogrammi](https://pxstud.io/it/docs/scripting/frames.md), [matematica dei colori](https://pxstud.io/it/docs/scripting/color.md) e altro.
