venerdì 26 settembre 2025

GODOT - Elemento dietro e davanti ad un oggetto

In alcuni giochi è necessario che il personaggio passi davanti all'oggetto, oppure dietro. Ad esempio, davanti ad un albero o dietro ad esso.
E questo deve dipendere dal punto in cui l'oggetto è "attraversato".
Godot ha un sistema per generare questo effetto: l'ordinamento sull'asse Y.

In pratica, per gli oggetti che hanno lo stesso "Z index", il sistema disegna prima gli oggetti che hanno un valore di Y più "basso" (cioè verso il fondo dello schermo) e poi quelli con un valore più alto.

Per abilitare questo, si entra nel "nodo root" della scena -che dev'essere ereditato da CanvasItem (tipo Node2D), si apre il menu "ordering", si controlla che lo Z Index sia 0 e poi si abilita "Y Sort Enabled".

Facendo questo, quando l'elemento (ad esempio, il protagonista) ha un valore Y più "basso" del secondo oggetto (ad esempio, un ostacolo), il sistema lo rappresenterà davanti. Se invece è più alto, il sistema lo disegnerà prima, e quindi apparirà "dietro" all'ostacolo.
Questo "valore Y" viene considerato prendendo il centro della "croce" che appare sull'oggetto (cioè la posizione del suo "posizionamento").

lunedì 22 settembre 2025

GODOT - Uso dei timer

Mi è capitato di dover inserire un timer nel codice GDScript per gestire degli eventi temporizzati senza utilizzare un singolo elemento aggiunto ai nodi (cosa che potrebbe essere problematica se si devono temporizzare più effetti/azioni).

La definizione/inizializzazione del timer è abbastanza semplice:

self.timer = Timer.new() # creo una nuova variabile di tipo Timer
self.timer.autostart = false # indico che non deve partire in automatico
self.timer.one_shot = true # indico che deve "girare" solo una volta
self.timer.paused = false # indico che il timer non è "in pausa"
A questo punto, è tutto pronto.
Però... per poter partire, il timer dev'essere inserito in un nodo per poter funzionare!
$NodeInTree.add_child(self.timer)
A questo punto, si può collegare il signal "timeout" ad una funzione e poi far partire il timer, indicando il tempo entro cui raggiungere il timeout:
self.timer.timeout.connect(self._on_timeout)
self.timer.start(5)

func _on_timeout() -> void:
    pass

lunedì 15 settembre 2025

GODOT - Risoluzione per cellulari Android

Per avere l'applicazione a schermo intero, la risoluzione corretta è: 2400x1080 (almeno, sul mio OnePlus Nord CE 5G).

E' possibile ovviamente utilizzare il viewport per definire delle risoluzioni minori, che "scalino".

Usando la 1200x540, l'effetto è gradevole e non è "pixellato".

domenica 14 settembre 2025

GODOT - Icone per Android

Provando a realizzare un'icona adatta ad un'app per android, mi sono accorto che il sistema "taglia" l'immagine con il contenuto centrale anziché utilizzare l'intera immagine.

In pratica, producendo un'icona 432x432 (come da guida dell'Export), si ottiene un'icona più piccola. Per cui bisogna considerare visibile esclusivamente il campo 284x284 all'interno dell'icona.

Per un'analisi dettagliata su come creare le icone per Android, andare qui.

mercoledì 10 settembre 2025

LOVE2D - Formattazione di stringhe

In Love2d è possibile utilizzare la funzione string.format per stampare (o, in generale, formattare) i dati. Considerando la mancanza di una funzione di serializzazione per il salvataggio dei dati, è bene sapere come funziona questa formattazione.

In pratica, funziona come la printf in C: utilizza una combinazione di caratteri particolari per indicare che tipologia di dato si vuole stampare.

Ecco una lista delle tipologie di dato stampabili:

%s  stringa
%d  decimale o intero
%f  formattazione a virgola mobile  (ad esempio, per math.pi stampa 3.141593)
%e  formattazione scientifica  (ad esempio, per math.pi stampa 3.141593e+00)
$E  formattazione scientifica  (ad esempio, per math.pi stampa 3.141593E+00)
%g  formattazione "automatica" (ad esempio, per math.pi stampa 3.141593)
%G  formattazione "automatica" (ad esempio, per math.pi stampa 3.141593)
%o  valore in base ottale
%x  valore in base esadecimale
%c  carattere
%q  codice Lua

Da notare l'ultima tipologia, utilissima per stampare esattamente quello che ha interpretato il codice Lua!

Altre informazioni si possono trovare a questo indirizzo:

https://tui.ninja/lua/strings/formatting/

martedì 9 settembre 2025

GODOT - Animare un contatore "score"

 Per animare un contatore di score, bisogna usare uno script e sfruttare il "delta" fornito dalla funzione "process".

Questo lo script di esempio:

var finished = true
var time = 0.0
var time_to_current_score = 2.0
var a = true

var score = 1001

func _process(delta):
  if finished and a:
    time += delta
    text = str(int(time / time_to_current_score * score))
    if time >= time_to_current_score:
      a = false
      text = str(score)