Creiamo un oggetto che conterrà al suo interno tutte le funzionalità che vorremmo attribuirgli:
(function() {
// Crea un nuovo sprite per la HUD function CustomHUD() {
this.initialize.apply(this, arguments);
};
CustomHUD.prototype = Object.create(Sprite.prototype); CustomHUD.prototype.constructor = CustomHUD; CustomHUD.prototype.initialize = function() {
Sprite.prototype.initialize.call(this); // Il resto del codice...
};
CustomHUD.prototype.update = function() {
Sprite.prototype.update.call(this); // Il resto del codice...
};
})();
Adesso dentro dobbiamo inserirgli le funzioni:
CustomHUD è una sottoclasse di Sprite, che è la classe madre che gestisce tutti gli sprite presenti in RPG Maker MV.
ATTENZIONE per i niubbi, Sprite non sono le immagini in sé.
Gli Sprite sono degli oggetti fatti apposta per ospitare le immagini, i bitmap.. i disegni. Le bitmap invece sono gli oggetti che ospitano le finestre. Poi c'è la tela ma vabbè non voglio andare fuori tema.
Ad ogni modo, questo concetto è molto utile se si vuole imparare a fare ste cose. :)
Comunque come prima funzione si crea lo strumento initialize che serve per annotare, elencare, ideare, creare tutti gli oggetti grafici (appunto Gli Sprite) che ospiteranno a loro interno
le icone, i font dei testi per identificare gli HP, gli MP, gli EXP da raggiungere e quelli mancanti e altro...
CustomHUD.prototype = Object.create(Sprite.prototype);
CustomHUD.prototype.constructor = CustomHUD;
CustomHUD.prototype.initialize = function() {
Sprite.prototype.initialize.call(this);
// Imposta il nome dell'eroe this._actorName = "";
// Imposta le icone per l'HP, MP e EXP
this._hpIcon = new Sprite(ImageManager.loadSystem("IconSet"));
this._hpIcon.setFrame(96, 0, 32, 32);
this._mpIcon = new Sprite(ImageManager.loadSystem("IconSet")); this._mpIcon.setFrame(128, 0, 32, 32);
this._expIcon = new Sprite(ImageManager.loadSystem("IconSet")); this._expIcon.setFrame(192, 32, 32, 32);
// Imposta i testi per l'HP, MP e EXP this._hpText = new Sprite(new Bitmap(100, 32));
this._mpText = new Sprite(new Bitmap(100, 32));
this._expText = new Sprite(new Bitmap(100, 32));
// Imposta la posizione dei vari elementi this._hpIcon.x = 0; this._hpIcon.y = 0;
this._mpIcon.x = 0;
this._mpIcon.y = 32; this._expIcon.x = 0;
this._expIcon.y = 64;
this._hpText.x = 32;
this._hpText.y = 0;
this._mpText.x = 32;
this._mpText.y = 32; this._expText.x = 32; this._expText.y = 64;
// Aggiungi tutti gli elementi alla HUD this.addChild(this._hpIcon); this.addChild(this._mpIcon); this.addChild(this._expIcon); this.addChild(this._hpText); this.addChild(this._mpText); this.addChild(this._expText);
// Aggiorna la HUD
this.update();
};
Dopo aver ideato gli oggetti (Sprite) e oggetti (bitmap) che ospiteranno le grafiche dell'Hud
Si gioca con loro in modo da sperimentare su di loro condizioni
cicli, altre funzioni di interazione.
Spiego meglio con un esempio:
Poniamo il caso che io creo l'oggetto acqua. Nel metodo inizialize si assegna appunto un valore di inizio associato a questo oggetto acqua. Neutralità...
Con il seguente strumento update invece ci sbizzarriamo e ci divertiamo con il giocare con gli oggetti ideati prima.
Ad esempio possiamo creare un oggetto concettuale acqua appunto che associamo ad un evento globale e facciamo in modo che ogni volta che l'eroe ha sete e beve, la barra della sete si ricarica.
ecc... Veramente in update potete divertirvi a sperimentare.
Adesso vi mostro però, tornando in tema cosa accade:
CustomHUD.prototype.update = function() {
Sprite.prototype.update.call(this);
// Ottieni l'eroe attivo
var actor = $gameParty.leader();
// Aggiorna il nome dell'eroe
if (this._actorName !== actor.name()) {
this._actorName = actor.name();
this._hpText.bitmap.drawText(actor.name(), 0, 0, 100, 32, "left");
}
// Aggiorna l'HP dell'eroe
this._hpText.bitmap.drawText(actor.hp + "/" + actor.mhp, 0, 0, 100, 32, "right");
// Aggiorna il MP dell'eroe
this._mpText.bitmap.drawText(actor.mp + "/" + actor.mmp, 0, 0, 100, 32, "right");
// Aggiorna l'EXP dell'eroe
this._expText.bitmap.drawText(actor.currentExp() + "/" + actor.nextRequiredExp(), 0, 0, 100, 32, "right");
};
La funzione $gameParty.leader(); della classe Sprite e richiamata qui all'occorrenza ci servirà per evidenziare l'eroe. Ossia l'oggetto leader appunto che il party segue e che sta in testa, occupa posizione 1.
Viene verificato se i suoi parametri iniziali sono attivi e se lo sono valuta se i parametri ad essi associati sono cambiare. Se lo sono esegue l'aggiornamento dei nuovi dati di gioco.
FINE STILE 1