class Window_TestoScelte < Window_Command
def initialize(x, y, width, height)
super(x, y)
end
def window_width
return Graphics.width - 20
end
def window_height
return 120
end
def make_command_list
add_command($game_message.choices[0.to_i], :line0)
add_command($game_message.choices[1.to_i], :line1)
add_command($game_message.choices[2.to_i], :line2)
add_command($game_message.choices[3.to_i], :line3)
add_command($game_message.choices[4.to_i], :line4)
end
def call_ok_handler
close
end
end
class Scene_TestoScelte < Scene_MenuBase
def start
super
comandi
update
end
def comandi
@commands=Window_TestoScelte.new(10, 280, Graphics.width - 20, 120)
@commands.set_handler(:line0, method(:do_line0))
@commands.set_handler(:line1, method(:do_line1))
@commands.set_handler(:line2, method(:do_line2))
@commands.set_handler(:line3, method(:do_line3))
@commands.set_handler(:line4, method(:do_line4))
end
def do_line0
$game_variables [1]!=5
end
def do_line1
end
def do_line2
end
def do_line3
end
def do_line4
end
end
In che senso "si blcoca"? Va in freeze? O lancia un errore? Se lancia un errore, devi anche descriverlo perché è da quello che capisci cosa non va e come risolverlo.
EDIT: Controllando meglio il codice, c'è un sacco di roba che non va. Comincio con il dire che non so cosa tu voglia ottenere, ma qualsiasi cosa tu voglia fare lo stai facendo sbagliato.
def initialize(x, y, width, height)
super(x, y)
end
Hai dichiarato initialize con width e height, ma non vengono usati questi parametri giacché super richiama solo x e y.
Perché mai questa finestra di comandi deve prendere le scelte della finestra di messaggio? Non puoi direttamente mettergli i nomi dei comandi che vuoi direttamente? Inoltre, i comandi come 1.to_i e simili sono completamente inutili. Stai cercando di convertire 1 in un intero, ma 1 è già un intero. Non ne vedo il motivo.
def do_line0
$game_variables [1]!=5
end
Praticamente questo metodo non fa che restituire vero se la variabile 1 è diversa da 5. Non vedo il perché del comando, visto che il return di un metodo chiamato tramite finestra non viene preso.
Il metodo update della scena nel metodo start è inutile. Viene chiamato automaticamente dopo l'inizializzazione.
Qui ci sono diversi errori. Primo, stai dando array vuoti ([]) come scelte della finestra di messaggio, quando in genere si impostano semplicemente le stringhe. Anzi, il codice è del tutto inutile visto che dopo verranno istanziate.
Secondo, prima trasporti il giocatore nella schermata con SceneManager.call, poi imposti le scelte della finestra dei messaggi (e ribadisco, non ho idea perché tu voglia disturbare la finestra dei messaggi quando puoi direttamente impostare le voci del menu direttamente in make_command_list): ovviamente, al comando SceneManager.call trasporterà nella schermata, che istanzierà la finestra e non troverà il testo del messaggio, perché scritto al di fuori della chiamata.
Ultimo errore che vedo
@stringa2 = "Ho ragione"
Stai utilizzando variabili d'istanza al posto di variabili locali. Ricordati l'uso delle variabili (descritto nella mia guida):
Le variabili d'istanza si utilizzano nella classe per conservarne il valore, mentre le variabili locali si usano all'interno dei metodi o nei piccoli script.
Ad occhio e croce, il modo più corretto di scrivere ciò che vorresti è
Spoiler
class Window_TestoScelete < Window_Command
def window_width; Graphics.width - 20; end
def window_height; fitting_height(5); end
def make_command_list
add_command('Scelta 1', :line0)
add_command('Scelta 2', :line1)
add_command('Scelta 3', :line2)
add_command('Scelta 4', :line3)
add_command('Scelta 5', :line4)
end
end
class Scene_TestoScelte < Scene_MenuBase
def start
super
comandi
end
def comandi
@commands = Window_TestoScelte.new(10, 280)
@commands.set_handler(:line0, method(:do_line0))
@commands.set_handler(:line1, method(:do_line1))
@commands.set_handler(:line2, method(:do_line2))
@commands.set_handler(:line3, method(:do_line3))
@commands.set_handler(:line4, method(:do_line4))
@commands.set_handler(:cancel, method(:close_window))
end
def do_line0
end
def do_line1
end
def do_line2
end
def do_line3
end
def do_line4
end
def close_window
@commands.close
# se invece volevi farlo uscire, SceneManager.return
end
end
e chiamare semplicemente con SceneManager.call(Scene_TestoScelte)
"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]
Miei script per RPG Maker VX Ace:
Spoiler
*NB Tutti i miei script sono protetti da licenza CC - BY
Spoiler
Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.
ho cercato di creare questo script per far in modo che nel mio gioco,quando voglio che si abbiano più di 4 scelte,io possa avere uno script base senza dover ogni volta andar a cambiare le parole,in questo caso cambio
def make_command_list
add_command('Scelta 1',:line0)
add_command('Scelta 2',:line1)
add_command('Scelta 3',:line2)
add_command('Scelta 4',:line3)
add_command('Scelta 5',:line4)
end
con delle variabili,in modo tale da non dover ogni volta creare un nuovo script
poi se è possibile,vorrei tipo fare che per ogni scelta dia un certo valore ad una variabile in modo tale da poter usare poi un blocco condizionale che si attiva se c'è un determinato valore,oppure vorrei trovare un modo più semplice ma che alla fine mi dià lo stesso risultato di "Mostra scelte"
INOLTRE ALTRO PROBLEMA IL GIOCO SI FREEZA
si freeza sia se esco col comando close sia se faccio una scelta,come risolvo il problema?
grazie anticipatamente
Se vuoi semplicemente mostrare più scelte, perché non modifichi direttamente la finestra di messaggio invece di creare un nuovo script? Anche il passaggio ad una nuova schermata è poco consono.
"Io non volevo solo partecipare alle discussioni. Volevo avere il potere di farle fallire" [cit.]
Miei script per RPG Maker VX Ace:
Spoiler
*NB Tutti i miei script sono protetti da licenza CC - BY
Spoiler
Questa licenza permette a terzi di distribuire, modificare, ottimizzare ed utilizzare la tua opera come base, anche commercialmente, fino a che ti diano il credito per la creazione originale. Questa è la più accomodante delle licenze offerte. É raccomandata per la diffusione e l'uso massimo di materiali coperti da licenza.