Jump to content
Rpg²S Forum

[RGSS] Finestre Selezionabili


Recommended Posts

Creazione di una finestra Selezionabilel

1.0

 

1. Introduzione

Per
: RPG MakerXP/VX

Autore
: The Sleeping Leonhart

Descrizione
: Ampliamento del tutorial sulla creazione di finestre, nello specifico insegna la creazione di finestre selezionabili.

Ultima modifica
: 02/03/2009

 

2. Tutorial

Le finestre selezionabili sono un tipo di finestra che permette di selezionare qualcosa(ma va?).

Un esempio di finestra selezionabile è la finestra di selezione del titolo, la finestra di selezione delle skill ecc...

La creazione delle finestre selezionabili non differisce di molto da quella per le finestre normali, per prima cosa dobbiamo definire la nostra finestra selezionabile

class NOMEFINESTRA < Window_Selectable

end

generalmente viene usata la stessa nomenclatura usata nelle normali finestre, cioè

Window_Qualcosa < Window_Selectable

Window_Selectable è la classe che fa ereditare la proprietà di finestra selezionabile alla nostra finestra,

Window_Selectable è a sua volta parente della classe Window_Base quindi possiamo usare tutti i comandi usati

per creare le finestre normali.

OK.... ora definita la classe, come consuetudine inizializziamo la finestra

  def initialize
super( X, Y, LARGHEZZA, ALTEZZA)
self.contents = Bitmap.new( width - 32, height - 32)
@item_max = NUMEROOGETTIMASSIMI
@column_max = NUMERODICOLONNE
refresh
 end

L'inizializzazione di una finestra selezionabile è simile a quella di una finestra normale, nelle finestre selezionabili però vengono aggiunti due nuovi valori,

@item_max, che indica alla finestra il numero totali di oggetti selezionabili che ci saranno nella finestra, e @item_max, che indica il numero massimo di colonne in cui saranno disposti gli oggetti.

Spesso nelle finestre selezionabili il contents viene fatto piu grande di come lo definiamo di solito, questo perchè gli ogetti che vogliamo disegnare non entrano nella finestra,

un esempio è la Window_Command, se osservate il suo contents lo troverete scritto così

self.contents = Bitmap.new(width - 32, @item_max * 32)

quindi largo quanto la finestra ma lungo quanto gli ogetti * 32, nel VX il valore che moltiplica è WLH (cioè 24), questo perchè il VX ha una risoluzione inferiore e quindi come espediente per disegnare più oggetti viene data meno spaziatura tra un ogetto e l'altro. Di standard il cursore di una finestra selezionabile è impostato su -1, e quindi non viene mostrato, per ovviare possiamo mettere subito dopo refresh

self.index = 0

in questo modo avremo il cursore posizionato sul nostro primo oggetto.

Adesso è giunto il momento di disegnare nella finestra, come ho gia detto i metodi per disegnare su una finestra selezionabile sono gli stessi delle finestre normali.

Per far si che però in nostri oggetti siano allineati al cursore di selezione bisogna conoscere le coordinate in cui esso apparirà e di conseguenza disegnare in quelle coordinate, quello che si fa di solito è fare un ciclo da 0 a @item_max al cui interno vengono calcolate le coordinate dell'oggetto e fatto scrivere, esempio

def refresh
 self.contents.clear
 for i in 0...@item_max
x = i % @column_max * 32
y = i / @column_max * 32
self.contents.draw_text(x, y, 96, 24, "Oggetto #{i + 1}")
 end
end

Questo esempio è molto rudimentale ma penso che renda bene l'idea, in alternativa vi consigli di spulciarvi le seguenti finestre:
Window_Skill

Window_Item

Window_Target

Window_ShopCommand

Ce ne sono altre, ma queste sono quelle che al momento mi sono venute in mente.

Se guardate bene in alcune di queste finestre è definito il metodo

def update_help
 QUALCOSA
end

Questo metodo permette di scrivere qualcosa sulla Window_Help una volta selezionato un comando, al momento sconsiglio di toccarlo in quento verrà ripreso meglio nelle Scene.

 

Ok adesso un finestra di esempio, questa finestra mostra i valori delle variabili:

 

class Window_ProvaDiSelezione < Window_Selectable
 def initialize
super(0, 0, 480, 256)
#Gli oggetti massimi sono il numero delle variabili
@item_max = $data_system.variables.size - 1
#Gli oggetti verranno disposti in 2 colonne
@column_max = 2
#Il contenuto è calcolato normalmente per la larghezza, mentre per
#l'altezza viene usata il numero di ogetti massimi disviso il numero di colonne,
#così da ottenere le righe, e poi le righe vengono moltiplicate per 32
self.contents = Bitmap.new(width - 32, 32 * (@item_max / @column_max))
refresh
self.index = 0
 end
 
 def refresh
self.contents.clear
#ciclo per disegnare per ciascun oggetto
for i in 0...@item_max
  #viene richiamato un metodo che disegnerà quello che vogliamo scrivere
  #per l'oggetto i
  draw_item(i)
end
 end
 
 def draw_item(index)
#calcola le coordinate basate sull'indice dell'oggetto
x = index % @column_max * (self.width / @column_max)
y = index / @column_max * 32
#scrive il numero della variabile più il valore in essa contenuto
self.contents.draw_text(x + 4, y + 4, 240, 24, sprintf("%04d : #{$game_variables[index + 1]}", index + 1))
 end
end

 

Immagine:

 

http://img530.imageshack.us/img530/304/immaginei.png

 

Link to comment
Share on other sites

Bene, ma se volgio fare che una volta selezionata la scelta accade qualcosa?

 

 

Partecipante al Rpg2s.net Game Contest 2008/2009

Gioco in Sviluppo:

Fantasy Chronicle

 

Sarica e commenta anche tu!

 

http://img120.imageshack.us/img120/3914/adlucariodd0.pnghttp://img74.imageshack.us/img74/8841/admariomc6.pnghttp://img177.imageshack.us/img177/8113/adzsamuszd3.pnghttp://img359.imageshack.us/img359/9097/adfalcoqq6.png

http://img382.imageshack.us/img382/3572/adlucasom6.pnghttp://img501.imageshack.us/img501/5646/adsnakepp3.png

 

http://team.ffonline.it/imgpersonaggio/cloud_it.jpghttp://team.ffonline.it/imgpersonaggio/cyan_it.jpghttp://team.ffonline.it/imgpersonaggio/steiner_it.jpg

 

Un tizio riguardo Mario Galaxy

 

io l'ho provato, molto divertente e colorato, ma nn c'entra nulla il termine "cpaolavoro" o "miglior gioco" x un gioco del genere, e ha se, nn puo essere paragonato a "veri" giochi del calibro di resident evil,tekken,gran turismo,rachet e clank,assassin's creed ecc.....

 

 

Link to comment
Share on other sites

Di nuovo ottimo tutorial Sleeping! Complimenti^ ^

Quando mi deciderò ad imparare il ruby passerrò sicuramente da quì!

(\_/)
(^ ^) <----coniglietto rosso, me!
(> <)


Il mio Tumblr dove seguire i miei progetti, i progetti della Reverie : : Project ^ ^

http://i.imgur.com/KdUDtQt.png disponibile su Google Play, qui i dettagli! ^ ^

http://i.imgur.com/FwnGMI3.png completo! Giocabile online, qui i dettagli! ^ ^

REVERIE : : RENDEZVOUS (In allenamento per apprendere le buone arti prima di cominciarlo per bene ^ ^) Trovate i dettagli qui insieme alla mia intervista (non utilizzerò più rpgmaker) ^ ^

 

SUWOnzB.jpg 🖤
http://www.rpg2s.net/dax_games/r2s_regali2s.png E:3 http://www.rpg2s.net/dax_games/xmas/gifnatale123.gif
http://i.imgur.com/FfvHCGG.png by Testament (notare dettaglio in basso a destra)! E:3
http://i.imgur.com/MpaUphY.jpg by Idriu E:3

Membro Onorario, Ambasciatore dei Coniglietti (Membro n.44)

http://i.imgur.com/PgUqHPm.png
Ufficiale
"Ad opera della sua onestà e del suo completo appoggio alla causa dei Panda, Guardian Of Irael viene ufficialmente considerato un Membro portante del Partito, e Ambasciatore del suo Popolo presso di noi"


http://i.imgur.com/TbRr4iS.png<- Grazie Testament E:3
Ricorda...se rivolgi il tuo sguardo ^ ^ a Guardian anche Guardian volge il suo sguardo ^ ^ a te ^ ^
http://i.imgur.com/u8UJ4Vm.gifby Flame ^ ^
http://i.imgur.com/VbggEKS.gifhttp://i.imgur.com/2tJmjFJ.gifhttp://projectste.altervista.org/Our_Hero_adotta/ado2.png
Grazie Testament XD Fan n°1 ufficiale di PQ! :D

Viva
il Rhaxen! <- Folletto te lo avevo detto (fa pure rima) che non
avevo programmi di grafica per fare un banner su questo pc XD (ora ho di
nuovo il mio PC veramente :D)

Rosso Guardiano della
http://i.imgur.com/Os5rvhx.png

Rpg2s RPG BY FORUM:

Nome: Darth Reveal

 

PV totali 2
PA totali 16

Descrizione: ragazzo dai lunghi capelli rossi ed occhi dello stesso colore. Indossa una elegante giacca rossa sopra ad una maglietta nera. Porta pantaloni rossi larghi, una cintura nera e degli stivali dello stesso colore. E' solito trasportare lo spadone dietro la schiena in un fodero apposito. Ha un pendente al collo e tiene ben legato un pezzo di stoffa (che gli sta particolarmente a cuore) intorno al braccio sinistro sotto la giacca, copre una cicatrice.
Bozze vesti non definitive qui.

Equipaggiamento:
Indossa:
60$ e 59$ divisi in due tasche interne
Levaitan

Spada a due mani elsa lunga

Guanti del Defender (2PA)
Anello del linguaggio animale (diventato del Richiamo)

Scrinieri da lanciere (2 PA)

Elmo del Leone (5 PA)

Corazza del Leone in Ferro Corrazzato (7 PA)

ZAINO (20) contenente:
Portamonete in pelle di cinghiale contenente: 100$
Scatola Sanitaria Sigillata (può contenere e tenere al sicuro fino a 4 oggetti curativi) (contiene Benda di pronto soccorso x3, Pozione di cura)
Corda
Bottiglia di idromele
Forma di formaggio
Torcia (serve ad illuminare, dura tre settori)

Fiasca di ceramica con Giglio Amaro (Dona +1PN e Velocità all'utilizzatore)
Ampolla Bianca

Semi di Balissa

 

CAVALLO NORMALE + SELLA (30 +2 armi) contentente:
66$
Benda di pronto soccorso x3
Spada a due mani

Fagotto per Adara (fazzoletto ricamato)


 

Link to comment
Share on other sites

  • 3 weeks later...
Bene, ma se volgio fare che una volta selezionata la scelta accade qualcosa?

Be per quello vi devo spiegare le scene, cioè lo script che mostra le finestre e gli fa svolgere delle azioni, appena posso scrivo un tutorial anche su quello, scene e finestre sono complementari, con le scene senza finestre non fai niente mentre le sole finestre te le dai in faccia se non le metti in una scena (spero che ho reso l'idea)

 

Di nuovo ottimo tutorial Sleeping! Complimenti^ ^

Quando mi deciderò ad imparare il ruby passerrò sicuramente da quì!

Grazie ^^

Link to comment
Share on other sites

  • 3 months later...

come si fa a colorare un solo UN oggetto della window selectable quando nella scene si preme un tasto?

ho provato in vari modi ma non riesco, sono riuscito solo facendo altre finestre per ogni comando XD

Link to comment
Share on other sites

  • 4 years later...

Tutorial fantastico, però ho un problemino nella finestra selezionabile, quando vado a muovere il cursore (index) rimane fermo sul primo oggetto se l'index è 0 rimane fermo sul primo oggetto non è che devo aggiungere qualcosa al main?

 

 

class Finestra_prova < Window_Selectable

def initialize
super (0,0, 314, 476)
self.contents = Bitmap.new(width - 32, height - 32)
@item_max = 4
@column_max = 1
self.index = 0
refresh
end
def refresh
self.contents.clear
for i in 0...@item_max
x = i % @column_max*32
y = i / @column_max*32
self.contents.draw_text(x, y, 96, 24, "Oggetto #{i + 1}")
end
end
end
class Finestra_Due < Window_Base
def initialize
super( 318, 0, 314, 476)
end
end
class Scene_Prova
def main
$game_system.se_play($data_system.decision_se)
@finestra = Finestra_Sega.new
@finestra2 = Finestra_Due.new
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
@finestra.dispose
@finestra2.dispose
end
def update
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Map.new
end
end

end

 

 

 

 

Ok ho risolto da solo, ma come faccio a collegare una scene quando premo invio su un determinato index?

Edited by Gale
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...