LogoPixi’VN

Componenti del canvas

Panoramica dei componenti canvas integrati e personalizzati in Pixi'VN, incluse le funzionalità di estensione e memoria.

Pixi’VN fornisce un set di componenti canvas. Questi componenti estendono i componenti Pixi.js, aggiungendo varie funzionalità, come la possibilità di salvare il loro stato attuale.

Cosa sono i componenti canvas? I componenti sono elementi costitutivi riutilizzabili per le app canvas, che consentono agli sviluppatori di app di creare controlli personalizzati da utilizzare all'interno di un'app o tra app utilizzando una libreria di componenti. I componenti possono utilizzare funzionalità avanzate, quali proprietà personalizzate, e abilitare capacità complesse.

Componenti di base

I componenti disponibili sono:

Componenti personalizzati

È possibile creare componenti personalizzati estendendo i componenti di base. Per fare ciò, è necessario utilizzare il decorator @canvasComponentDecorator.

@canvasComponentDecorator è un decorator che salva il componente canvas nella memoria. Ha un parametro facoltativo che è l'id utilizzato da Pixi'VN per fare riferimento a questa classe (deve essere univoco). Se non si passa l'id, verrà utilizzato come id il nome della classe. (Come abilitare i decorator in TypeScript?)

È necessario sovrascrivere la proprietà memory per memorizzare le proprietà del componente personalizzato. In get memory(), è molto importante restituire la proprietà className; questa proprietà deve essere uguale all'id utilizzato nel decorator.

Ad esempio, è possibile creare una classe AlienTinting che estende la classe Sprite per gestire la direzione e la velocità di ogni singolo alieno in un'animazione.

canvas/components/AlienTinting.ts
@canvasComponentDecorator() // or @canvasComponentDecorator("AlienTintingTest")
class AlienTintingTest extends Sprite<IAlienTintingMemory> {
    override get memory() {
        return {
            ...super.memory,
            direction: this.direction,
            turningSpeed: this.turningSpeed,
            speed: this.speed,
            className: "AlienTintingTest",
        }
    }
    override set memory(memory: IAlienTintingMemory) {
        super.memory = memory as ICanvasSpriteMemory
        this.direction = memory.direction
        this.turningSpeed = memory.turningSpeed
        this.speed = memory.speed
    }
    direction: number = 0
    turningSpeed: number = 0
    speed: number = 0
    static override from(source: Texture | TextureSourceLike, skipCache?: boolean) {
        let sprite = Sprite.from(source, skipCache)
        let mySprite = new AlienTintingTest()
        mySprite.texture = sprite.texture
        return mySprite
    }
}