Sleeping Leonhart Posted March 2, 2009 Share Posted March 2, 2009 Creazione di una finestra Selezionabilel1.0 1. IntroduzionePer: RPG MakerXP/VXAutore: The Sleeping LeonhartDescrizione: Ampliamento del tutorial sulla creazione di finestre, nello specifico insegna la creazione di finestre selezionabili.Ultima modifica: 02/03/2009 2. TutorialLe 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 selezionabileclass NOMEFINESTRA < Window_Selectable endgeneralmente viene usata la stessa nomenclatura usata nelle normali finestre, cioèWindow_Qualcosa < Window_SelectableWindow_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 usatiper 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 endL'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 refreshself.index = 0in 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, esempiodef 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 endQuesto esempio è molto rudimentale ma penso che renda bene l'idea, in alternativa vi consigli di spulciarvi le seguenti finestre:Window_SkillWindow_ItemWindow_TargetWindow_ShopCommandCe 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 endQuesto 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 http://img296.imageshack.us/img296/8784/csuserbarew2.pngScarica la Demo!Tutti i miei script(o quasi) li trovi Qui! Link to comment Share on other sites More sharing options...
Darklink92 Posted March 2, 2009 Share Posted March 2, 2009 Bene, ma se volgio fare che una volta selezionata la scelta accade qualcosa? Partecipante al Rpg2s.net Game Contest 2008/2009http://www.rpg2s.net/contest/GameContest0809/gc0809-bannerino.jpgGioco in Sviluppo: Fantasy Chronicle Disponibile Versione demo!(capitolo 1)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.pnghttp://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 More sharing options...
Guardian of Irael Posted March 2, 2009 Share Posted March 2, 2009 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) ^ ^ 🖤http://www.rpg2s.net/dax_games/r2s_regali2s.png E:3 http://www.rpg2s.net/dax_games/xmas/gifnatale123.gifhttp://i.imgur.com/FfvHCGG.png by Testament (notare dettaglio in basso a destra)! E:3http://i.imgur.com/MpaUphY.jpg by Idriu E:3Membro Onorario, Ambasciatore dei Coniglietti (Membro n.44) http://i.imgur.com/PgUqHPm.pngUfficiale"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:3Ricorda...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.pngGrazie Testament XD Fan n°1 ufficiale di PQ! :DVivail Rhaxen! <- Folletto te lo avevo detto (fa pure rima) che nonavevo programmi di grafica per fare un banner su questo pc XD (ora ho dinuovo il mio PC veramente :D) Rosso Guardiano dellahttp://i.imgur.com/Os5rvhx.pngRpg2s RPG BY FORUM:Nome: Darth Reveal PV totali 2PA totali 16Descrizione: 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 interneLevaitanSpada a due mani elsa lungaGuanti 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)CordaBottiglia di idromeleForma di formaggioTorcia (serve ad illuminare, dura tre settori)Fiasca di ceramica con Giglio Amaro (Dona +1PN e Velocità all'utilizzatore)Ampolla BiancaSemi di Balissa CAVALLO NORMALE + SELLA (30 +2 armi) contentente:66$Benda di pronto soccorso x3Spada a due maniFagotto per Adara (fazzoletto ricamato) Link to comment Share on other sites More sharing options...
Sleeping Leonhart Posted March 17, 2009 Author Share Posted March 17, 2009 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 ^^ http://img296.imageshack.us/img296/8784/csuserbarew2.pngScarica la Demo!Tutti i miei script(o quasi) li trovi Qui! Link to comment Share on other sites More sharing options...
Valentino Posted July 16, 2009 Share Posted July 16, 2009 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 Targhette Rpg2s:http://img14.imageshack.us/img14/5421/contestsecondo.png Partecipante al Rpg2s.net Game Contest #3http://www.rpg2s.net/images/gc3/gc3_firma.pngGioco in Sviluppo: DREAMS http://img16.imageshack.us/img16/2121/dreamstitle2.png SKY's CRY!http://www.rpg2s.net...showtopic=12557 Lista di script creati da me: Support System FF9 Multiscope System Advanced Armor System Protection System Trance System FF2 Development System Scene Vittoria Animato Aperion System Elemosina System Valentino's Scene Shop Item Plus System Panorama Acceleration System Conversione da VX a XP, Vehicle System Sentinel System Scene Zoolab Valentino's Random System Oggetti Riutilizzabili Break Pictures Limit Gameover Animato Valentino's Gun Mode Valentino's Ally System Link to comment Share on other sites More sharing options...
Gale Posted December 12, 2013 Share Posted December 12, 2013 (edited) 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 = 1self.index = 0refresh end def refreshself.contents.clearfor i in 0...@item_maxx = i % @column_max*32y = i / @column_max*32self.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) endend class Scene_Prova def main $game_system.se_play($data_system.decision_se) @finestra = Finestra_Sega.new@finestra2 = Finestra_Due.new Graphics.transitionloop do Graphics.update Input.update update if $scene != selfbreak endend@finestra.dispose@finestra2.dispose end def updateif Input.trigger?(Input::B)$game_system.se_play($data_system.cancel_se)$scene = Scene_Map.newend end end Ok ho risolto da solo, ma come faccio a collegare una scene quando premo invio su un determinato index? Edited December 17, 2013 by Gale Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now