Rpg˛S Forum uses cookies. Read the Privacy Policy for more info. To remove this message, please click the button to the right:    I accept the use of cookies

Vai al contenuto

Rpg˛S Forum uses cookies. Read the Privacy Policy for more info. To remove this message, please click the button to the right:    I accept the use of cookies

Screen Contest #90

Kamikun






  • Si prega di effettuare il log in prima di rispondere
Aiuto nel creare una finestra "appropriata"

    mdqp
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 24 messaggi

#1 Inviato 06 April 2017 - 07:50 AM

Salve, è da un pò che guardo qua e là, ma non sono riuscito a capire come realizzare quello che vorrei, quindi ho deciso di chiedere, invece di sbattere la testa inutilmente.

 

Io ho creato nel menu di gioco una pagina di "informazioni personali" del protagonista (il gioco non prevede un party, quindi le informazioni riguardano un solo personaggio). Ora, quello che vorrei, è un sistema simile a quello che il gioco utilizza già per le skills, ad esempio: una finestra con un elenco "cliccabile" (attualmente, ho un array dal quale il gioco crea una lista), poi una seconda lista (questa ultima invece non cliccabile) che mostri una descrizione per ogni voce del secondo array.

 

In pratica, il protagonista sviluppa dei "tratti" giocando (quindi ho la sezione "tratti", ed ogni tratto dovrebbe avere la sua descrizione), il protagonista può farsi dei tatuaggi (quindi lista delle zone del corpo dove ci possono essere tatuaggi, e se ci sono, una descrizione degli stessi), etc.

 

Quello che non riesco a capire è come nella pagina delle skill (ed in tante altre nei menu del gioco), quando passi sopra ad una categoria, ti dà "l'anteprima" della prossima (se il protagonista usa le magie ed altre abilità, quando il cursore va su magie, compare subito l' elenco delle magie anche quando non è ancora attivo) e come si fà ad aggiornare la pagina immediatamente quando il cursore si trova su una categoria piuttosto che un' altra, e come potrei collegare il mio array di tatuaggi con un altro array di descrizioni per i tatuaggi, ad esempio.

 

Spero di essermi spiegato bene. Sono piuttosto confuso dalla creazione di finestre in genere, qualcosina ho imparato, ma in molti casi quello che mi aspetterei fosse relativamente facile si presenta come un' impresa molto complicata, invece.



    Holy87
  • Prode Guerriero

  • Rpg˛S Staff
  • Rens: 458
  • 6
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 7431 messaggi
  • Sesso:Maschio
  • Provenienza:San Giorgio a Cremano
  • Abilitā:Maestro

#2 Inviato 06 April 2017 - 08:08 AM

Prima di tutto, dovresti definire cosa sia questo "tatuaggio". Si tratta di una skill vera e propria o di qualcosa di diverso creato da te? Nel caso sia qualcosa di diverso, è conveniente creare una classe (ad es. "Tatuaggio")
 
class Tatuaggio
  attr_reader :nome
  attr_reader :descrizione
  def initialize(nome, descrizione)
    @nome = nome; @descrizione = descrizione
  end
end
 
Nel caso si tratti di un oggetto già resistente, quali informazioni deve scrivere l'altra finestra?

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

BannerOverdrive35.png
Cap3.png

578.png
 

Miei script per RPG Maker VX Ace:

Spoiler

 
I miei tutorial:
Spoiler

    mdqp
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 24 messaggi

#3 Inviato 06 April 2017 - 08:34 AM

Prima di tutto, dovresti definire cosa sia questo "tatuaggio". Si tratta di una skill vera e propria o di qualcosa di diverso creato da te? Nel caso sia qualcosa di diverso, è conveniente creare una classe (ad es. "Tatuaggio")
 

class Tatuaggio
  attr_reader :nome
  attr_reader :descrizione
  def initialize(nome, descrizione)
    @nome = nome; @descrizione = descrizione
  end
end
 
Nel caso si tratti di un oggetto già resistente, quali informazioni deve scrivere l'altra finestra?

 

 

Si tratta di qualcosa di diverso, creato da me: i tatuaggi sono meramente estetici (per quelli che vogliono personalizzare il personaggio, i tatuaggi poi li mostro come "strati" sul busto del personaggio), ed i tratti influenzano alcuni dialoghi, e nel gioco li seguo semplicemente usando degli switch e delle branches nelle conversazioni.

 

Ho preso le skill ad esempio per come mostrano immediatamente le informazioni anche quando il cursore passa sopra ad una categoria senza selezionarla e per il fatto che ha una struttura (elenco1>>elenco2>>descrizioni per le voci nell' elenco 2) simile a quella che vorrei anche io.

 

Quindi converrebbe creare una classe tatuaggio per questo, capito. Io al momento ho creato gli elenchi nell' array "a mano" (visto che il primo elenco sarà sempre lo stesso "tratti" "tatuaggi" "Statistiche", etc.), ma era più che altro per testare la cosa. Ti aggiungo sotto spoiler quello che ho creato finora, solo per testare le finestre (in un' altra versione ho già aggiunto la scena al menu, ma quella parte non è un problema, quindi nel test non l' ho aggiunta), ed avere un' idea di quello che potevo fare (se riconosci alcuni nomi è perchè stavo lavorando a questa cosa anche come esercizio man mano che leggevo RGSS in pillole):

 

Spoiler

 

Come vedi, sono ancora anni luce da quello che vorrei fare.



    Holy87
  • Prode Guerriero

  • Rpg˛S Staff
  • Rens: 458
  • 6
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 7431 messaggi
  • Sesso:Maschio
  • Provenienza:San Giorgio a Cremano
  • Abilitā:Maestro

#4 Inviato 06 April 2017 - 09:01 AM

Dipende da cosa sono. Se ci sono diverse proprietà da gestire, una classe è più semplice.

Allora ti faccio capire il ragionamento delle finestre a grandi linee:
Se intendi mostrare una finestra unica che mostra tratti o tatuaggi a seconda della scelta della finestra di comando (ho inteso così perché ne vedo una sola) allora devi impostare una variabile di istanza a questa finestra che tiene conto della modalità impostata (es. @mode = :traits)
Ovviamente devi fare in modo che la modalità di questa finestra sia modificabile creando un metodo dedicato (lo chiamiamo set_mode)
def set_mode(new_mode)
  return if new_mode == @mode # ci serve per risparmiarci di riaggiornare l'intera finestra se già c'è la stessa modalità impostata
  @mode = mode
  make_item_list # riaggiorno l'elenco dei contenuti a seconda della modalità
  create_contents # ricreo la bitmap contents perché il numero di elementi può cambiare
  refresh # riscrivo gli elementi
end
 
A questo punto dobbiamo fare in modo che la finestra dei comandi aggiorni automaticamente quella della lista. La prima cosa da fare è un metodo che imposti la finestra della lista all'interno della finestra dei comandi
def set_list_window(new_list_window); @list_window = new_list_window; end
 
Infine, nel metodo update della finestra di comando mettiamo il comando di aggiornare la modalità a seconda del comando evidenziato (update è già un metodo di Window_Base e viene già chiamato automaticamente ad ogni frame dalla schermata di gioco)
def update
  super
  if @list_window != nil
    @list_window.set_mode(current_symbol)
  end
end
Quello che resta da fare è impostare dalla classe della schermata la finestra della lista in quella dei comandi
@command_window.set_list_window(@finestra2)
Aggiungo che sarebbe bene usare nomi che rispecchiano il loro funzionamento, un giorno quando rivedrai questo script impazzirai per capire cosa sia una @finestra2.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

BannerOverdrive35.png
Cap3.png

578.png
 

Miei script per RPG Maker VX Ace:

Spoiler

 
I miei tutorial:
Spoiler

    mdqp
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 24 messaggi

#5 Inviato 06 April 2017 - 09:18 AM

Ah, grazie davvero, credo di essere riuscito a seguire la spiegazione (appena ho un pò di tempo, provo a vedere se la cosa funziona come immagino). Sono sempre molto pasticcione nel creare i nomi, ma in questo caso mi aggrapperò alla scusa che stavo solo testando la cosa. :uhuh:



    mdqp
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 24 messaggi

#6 Inviato 06 April 2017 - 13:56 PM

A quanto pare credevo di aver capito, ma non ho capito proprio niente, infatti non riesco a fare aggiornare la finestra. Forse mi conviene fare una richiesta nell' altra sezione. In realtà potrei anche ignorare la cosa, e chiamare una scena nuova per ogni categoria (con il vantaggio di avere la pagina intera per elencare i tratti, i tatuaggi e le altre categorie), ma mi piaceva l' idea di avere tutto in un posto solo, e mi da fastidio non riuscire in una cosa che non credo sia così complicata, in fondo. :hulk:



    Holy87
  • Prode Guerriero

  • Rpg˛S Staff
  • Rens: 458
  • 6
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 7431 messaggi
  • Sesso:Maschio
  • Provenienza:San Giorgio a Cremano
  • Abilitā:Maestro

#7 Inviato 06 April 2017 - 19:15 PM

A quanto pare credevo di aver capito, ma non ho capito proprio niente, infatti non riesco a fare aggiornare la finestra. Forse mi conviene fare una richiesta nell' altra sezione. In realtà potrei anche ignorare la cosa, e chiamare una scena nuova per ogni categoria (con il vantaggio di avere la pagina intera per elencare i tratti, i tatuaggi e le altre categorie), ma mi piaceva l' idea di avere tutto in un posto solo, e mi da fastidio non riuscire in una cosa che non credo sia così complicata, in fondo. :hulk:

In che senso non riesci a far aggiornare la finestra?


"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

BannerOverdrive35.png
Cap3.png

578.png
 

Miei script per RPG Maker VX Ace:

Spoiler

 
I miei tutorial:
Spoiler

    mdqp
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 24 messaggi

#8 Inviato 06 April 2017 - 19:50 PM

In che senso non riesci a far aggiornare la finestra?

 

Nel senso che non riesco nello scopo che mi ero prefissato (la finestra con la lista resta vuota, o si aggiorna solo appena aperta, ma non quando muovo il cursore o seleziono una delle categorie). Ci ho lavorato per delle ore, ormai ho perso il filo, per questo pensavo di fare una richiesta (vedendo uno script per intero, anche uno gnucco come me dovrebbe riuscire a capirlo), credo di aver capito il principio, ma evidentemente difetto troppo nella "grammatica", quindi non riesco comunque a metterlo insieme (ed adesso che ci ho pasticciato per ore, è solo un casino). Probabilmente dovrei studiarmi qualcos' altro, prima di tornarci su.



    Holy87
  • Prode Guerriero

  • Rpg˛S Staff
  • Rens: 458
  • 6
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 7431 messaggi
  • Sesso:Maschio
  • Provenienza:San Giorgio a Cremano
  • Abilitā:Maestro

#9 Inviato 07 April 2017 - 06:09 AM

Posta lo script.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

BannerOverdrive35.png
Cap3.png

578.png
 

Miei script per RPG Maker VX Ace:

Spoiler

 
I miei tutorial:
Spoiler

    mdqp
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 24 messaggi

#10 Inviato 07 April 2017 - 08:06 AM

Guarda, io lo posterei, ma non ho tenuto l' ultima versione (era diventato incomprensibile, quindi ho ripreso la versione precedente, e ci ho scopiazzato i pezzi di codice che hai suggerito, giusto per tenere tutto insieme, così quando ci devo pensare ho tutto in un solo script. Se lo vuoi vedere lo stesso, eccolo:

 

Spoiler



    Holy87
  • Prode Guerriero

  • Rpg˛S Staff
  • Rens: 458
  • 6
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 7431 messaggi
  • Sesso:Maschio
  • Provenienza:San Giorgio a Cremano
  • Abilitā:Maestro

#11 Inviato 07 April 2017 - 10:15 AM

Il primo errore che vedo è che tu hai usato due finestre diverse, mentre io ho pensato il comando a una singola finestra che riaggiorna il contenuto a seconda del comando evidenziato dal cursore. A questo punto è evidente che il metodo set_mode non serve e ci vuole un procedimento diverso, ma poi ho visto che alla fine viene creata una sola finestra. Quindi, come vuoi procedere? Una sola finestra o più finestre?
Il secondo errore che vedo, è che non hai definito il metodo make_item_list!
 
def make_item_list
  case @mode
    when :traits
      @data = ["Keeper", "Noble", "Lone wolf"]
    when :tattoos
      @data = ["Right arm", "Left arm", "Upper back"]
    else
     # niente
  end
end
Sempre se ovviamente vuoi utilizzare una sola finestra.

"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

BannerOverdrive35.png
Cap3.png

578.png
 

Miei script per RPG Maker VX Ace:

Spoiler

 
I miei tutorial:
Spoiler

    mdqp
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 24 messaggi

#12 Inviato 07 April 2017 - 11:08 AM

Infatti durante gli altri tentativi avevo rimosso la seconda finestra, ed avevo definito il metodo (anche se in maniera diversa, e credo avessi fatto un' errore prima). Ma come ho detto, avevo fatto una gran confusione, quindi avevo cancellato tutto, e ricominciato da capo.

 

Non che adesso vada molto meglio. :vergogna: Ad esempio, così:

 

Spoiler

 

Ottengo la finestra vuota, ed il gioco crasha immediatamente appena cerco di selezionare tattoos (dice che la variabile locale o modalita "mode" non è definita per la finestra Traits_Window).



    Holy87
  • Prode Guerriero

  • Rpg˛S Staff
  • Rens: 458
  • 6
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 7431 messaggi
  • Sesso:Maschio
  • Provenienza:San Giorgio a Cremano
  • Abilitā:Maestro

#13 Inviato 07 April 2017 - 15:59 PM

Ovviamente non ti va, c'è un errore di battitura

5c8679eb394f4ef5bbf723fd1e1da3d5.png

Non esiste una variabile mode. Ora, è vero che l'errore è stato mio (lo faccio spesso), ma basta guardare un attimo su cosa vuole dire l'errore per capirlo.

Aggiustando questo funzionerà, ma ricordati di aggiungere il comando make_item_list dopo @mode = :traits nell'inizializzazione (altrimenti la finestra sarà vuota inizialmente)


"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]

BannerOverdrive35.png
Cap3.png

578.png
 

Miei script per RPG Maker VX Ace:

Spoiler

 
I miei tutorial:
Spoiler

    mdqp
  • Nuovo Arrivato

  • Utenti
  • Rens: 0
  • 0
  • Stelletta
  • 24 messaggi

#14 Inviato 07 April 2017 - 16:52 PM

Ovviamente non ti va, c'è un errore di battitura

5c8679eb394f4ef5bbf723fd1e1da3d5.png

Non esiste una variabile mode. Ora, è vero che l'errore è stato mio (lo faccio spesso), ma basta guardare un attimo su cosa vuole dire l'errore per capirlo.

Aggiustando questo funzionerà, ma ricordati di aggiungere il comando make_item_list dopo @mode = :traits nell'inizializzazione (altrimenti la finestra sarà vuota inizialmente)

 

Non so come ringraziarti, soprattutto per la pazienza. :D

 

Ho spostato @mode= :traits prima dell' inizializzazione, e popola la finestra a dovere, adesso devo solo aggiustare tutto ed aggiungere tutti i contenuti per bene, ed avrò un menù fighissimo per il tutto. Grazie ancora!






  • Feed RSS