Jump to content
Rpg²S Forum

Laboratorio 1


Alato
 Share

Recommended Posts

In questo laboratorio non spiegher? nulla, o meglio, vi proporr? degli script da fare e in generale degli esercizi e se avrete problemi vi dar? una mano.
Non c'? limite di gradi o quant'altro, potete partecipare tutti.

Laboratorio 1

Fai in modo che premendo il tasto Z della tastiera ( Input::A di default) venga aperta/chiusa una finestra semi-trasparente che mostra il tempo di gioco.

Soluzione:

 

Spoiler


Bon, questa ? una possibile soluzione per realizzare la nostra finestra.
In Scene_Map, main:
@win_time = Window_PlayTime.new

@win_time.opacity = 180

@win_time.visible = false

[...,loop,etc,...]

@win.dispose
In Scene_Map, update:
[...]

if @win_time.visible

@win_time.update

if Input.trigger?(Input::A)

@win_time.visible = (not @win_time.visible)
Quest'ultima istruzione pone @win_time = true se ? false, e viceversa.

Se l'avete letta prima di aver provato a farla siete dei puzzoni. ;O;/
Link to comment
Share on other sites

Le cose sono due:

A) Sapete tutti (tra gli interessati al corso) farlo senza problemi.

B) Non c'è nessuno interessato a fare esercizio con l'RGSS.

 

Se è la B ditemelo subito che mi risparmio la fatica di fare i laboratori successivi, so occupare il mio tempo in modo migliore.

 

Fatemi sapere, bye. ^^

 

P.s. per gli interessati che l'hanno fatto senza problemi, possono postare un "ok, tutto a posto, vai col prossimo!" o qualcosa di simile: in questo modo mi rendo almeno conto della situazione. Non è necessario postare il codice, ma non è neanche vietato. Fate voi. :P

Link to comment
Share on other sites

Io sono interessato, ma in questo periodo mi riesce difficile dedicarmi solo all'RGSS per altri impegni.. credo che pure altri siano nella mia stessa situazione, cmq appena ho qualcosa posto :sisi:

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

Link to comment
Share on other sites

non ho la minima idea di come fare senza usare gli eventi:

ecco quello che avevo pensato:

 

1° evento:

auto-inizio

call script:

Game_Variables[2000]=1
$schermata = Window_PlayTime.new
$schermata.opacity = 0

erase event

 

2° evento

parallel process

attivazione su Variable 2000 greater or equal then 1

call script:

if Input.press?(Input::A)
 if Game_Variables[2000]== 1
Game_Variables[2000] = 2
$schermata.opacity = 255
 else
Game_Variables[2000] = 1
$schermata.opacity = 0
 end
end

 

dove sbaglio?

I Miei Script:
Salva Schermata (3 Aprile 2012)
Attacco Personalizzabile (2 Aprile 2012)
Keyboard Input (Porting) (17 Marzo 2012)
Continua...

Link to comment
Share on other sites

Beh, sembra strano, ma io ho alcune difficoltà. o_

Ci sto lavorando in questi giorni, io ci sono, dunque.

Se hai difficoltà esponile, è a questo che serve il laboratorio.

 

Io sono interessato, ma in questo periodo mi riesce difficile dedicarmi solo all'RGSS per altri impegni.. credo che pure altri siano nella mia stessa situazione, cmq appena ho qualcosa posto :sisi:

Non è che l'obiettivo del laboratorio sia postare il codice: io vi propongo degli esercizi che, imho, sono utili se si vuole imparare a trafficare con l'RGSS. Se non vi vengono avete la possibilità di chiedere supporto qui. Posso darvi una mano a capire cosa c'è che non va io, ma anche gli altri partecipanti che hanno fatto lo stesso esercizio.

Link to comment
Share on other sites

Alatoh, mi sei mancatoh ç_ç

Scommetto che a te sono mancati i miei script ç_ç soprattutto quelli pieni zeppi di commenti... xD

 

 

#Mettiamo che lo script sia da inserire in Scene_Map, più che logico no?
#in Main setto una variabile che sia vera quando la finestra è aperta, falsa quando è chiusa:
@W_already_opened = false

#Ora viene lo script vero e proprio. Il controllo di pressione del tasto
#deve essere eseguito costantemente, quindi va messo in Update:
if Input.trigger?(Input::A)
 #Controlla se la finestra è già aperta...
 if @W_already_opened == true
#... nel qual caso la "elimina" e rimette a False la variabile.
@W_time.dispose	
@W_already_opened = false
 #Oppure, se non è aperta...
 else
#... crea la finestra...
@W_time = Window_PlayTime.new
#... e ne imposta una semi-trasparenza.
@W_time.opacity = 100
#E ovviamente, mette a True la variabile.
@W_already_opened = true
 end
end
#Fine. Facile, vero?
#Con un po' di pazienza si possono mettere anche simpatici effetti di dissolvenza.
#Perchè non provate? :P

 

 

...

...

Sento che se faccio leggere ad Alah un altro script del genere, mi fucila :*

Questo è l'ultimo, giuro ;D

Edited by Lord Bel

~ R²S ~ - '°•o Realizing Random Scrips o•°'

Link to comment
Share on other sites

Scusate il doppio post, ho letto ora il post di Keroro.

 

Parti dal presupposto che se non lo specifico nel testo, non è necessario utilizzare eventi: supponiamo di voler creare qualcosa che funziona sempre, senza dover fare un call script per ogni mappa.

Ora non so se hai presente il funzionamento delle scene comunque lo riassumo brevemente: un gioco in esecuzione non è altro che un programma che attiva delle scene, che vengono di volta in volta contenute nella variabile globale $scene. Quando il gioco termina viene posto $scene = nil.

Perciò da quando eseguite il gioco fino al termine avrete sempre una "scena attiva" e sarà lì che dovrete andare a fare le dovute modifiche al codice.

 

Stato iniziale: $scene non inizializzato

Si passa al menu iniziale: $scene = Scene_Title.new

Selezionata la nuova partita si entra nella mappa: $scene = Scene_Map.new

 

Mentre ci muoviamo per la mappa di gioco (qualunque essa sia) la scena attiva sarà sempre Scene_Map, perciò se vogliamo che premendo Z si ottengano certi effetti, sarà nell'update di questa scena che dovremo fare delle aggiunte/modifiche.

 

Spero di averti dato un input utile per completare il laboratorio, per ora non ti dico altro così magari ci traffichi da solo.

Link to comment
Share on other sites

@Lord Bel:

Ti ho spoilerato il codice che magari qualcuno ci vuole ragionare sopra prima di leggere una possibile soluzione.

 

Mi accingo a commentare..

 

.. prima di tutto ricorda che nulla si auto-aggiorna: magari un *.update può contenere una serie di aggiornamenti concatenati, però se non lo inserisci nel loop in cui si trova il gioco non verrà mai attivato. Questo per dirti che manca un @W_Time.update all'interno del metodo update di Scene_Map :E

Altra cosa: non so dirti per certo se sia effettivamente peggio o altro, ma io eviterei totalmente di mettere delle inizializzazioni di oggetti all'interno di un loop. Personalmente credo sia molto meglio tutti gli oggetti all'interno dell'initialize/main e poi gestire la visibilità tramite l'attributo *.visible che vale per tutti i tipi di finestre derivanti da Window_Base (

Questo te lo lascio come compito: scopri come variare il visible in una sola riga, senza if e variabili aggiuntive (la tua flag @w_opener).

 

Bentornato ;P

 

 

Link to comment
Share on other sites

Lascio quello sopra per chi volesse vedere i miei errori 0_o

Non ci avevo pensato. Ghgh.

 

 

#Nel Main/Initialize:
@W_Time = Window_PlayTime.new
@W_Time.opacity = 100
@W_Time.visible = false

#Nel loop della scena [o in update, o nel semplice loop in Main/Inizialize]:
@W_Time.refresh

#Sempre nel loop della scena [meglio se in update]:
if Input.trigger?(Input::A)
  @W_Time.visible = !@W_Time.visible
end

#O, se lo vuoi in una sola riga u_u:
if Input.trigger?(Input::A) then @W_Time.visible = !@W_Time.visible end

#Anche qui assente da vari effetti di dissolvenze.

 

 

Deve essere per tutti questi "piccoli" accorgimenti che i miei script sono sempre pesantissimi, disordinatissimi e pressochè indecifrabili da esterni, benchè funzionanti :*

Edited by Lord Bel

~ R²S ~ - '°•o Realizing Random Scrips o•°'

Link to comment
Share on other sites

Ho provato, ma non sono riuscito completamente nella mia impresa:

Ho provato due metodi: 1°METODO ho messo nella classe scene_map nel main

    @time_window=Window_PlayTime.new
   @time_window.opacity=0  #[...]  @time_window.dispose

poi nell'update

 

      if  Input.trigger?(Input::A)
       if  @time_window.opacity==50
       @time_window.opacity=0
         else
       @time_window.opacity=50
       end
     end

solo che facendo così la scritta playtime non scompare.

2°METODO: ho inserito questo codice ma mi dà errore nel comando dispose

      if  Input.trigger?(Input::A)
       unless @time_window
       @time_window=Window_PlayTime.new
       @time_window.opacity=100
         else
       @time_window.dispose
       end
     end

 

 

 

It's online... It's Endless... And It's an RPG...

OERPG PROJECT by http://rpgart.org/

Link to comment
Share on other sites

ci tento con un po' di logica..

 

vado in Scene_Map nello stesso metodo dove viene inserito il richiamo al menù (ovvero def update)..

il codice che inserisco è questo:

all'inizio, insieme alle altre variabili metto

@variabile = 0

più in basso:

if Input.trigger?(Input::A) and
@variabile == 0
@finestra = Window_PlayTime.new
@variabile = 1
end

if Input.trigger?(Input::A) and
@variabile == 1
@finestra.dispose
@variabile = 0

 

come ragionamento è giusto o ho sbagliato tutto? XD

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

Link to comment
Share on other sites

*Comunicazione di servizio: ho aggiunto una possibile soluzione nel primo post*

 

@lord bel:

 

Te l'ho già detto su msn ma lo ripeto per tutti: così come lo ha fatto ora va bene ma c'è un errorino che lo rende poco ottimizzato: se notate ha utilizzato *.refresh che è la funzione di aggiornamento, il che è giusto, funziona. Il punto è che se si va poi a guardare la classe Windows_PlayTime si nota che oltre a un metodo refresh c'è un metodo update: questo non fa altro che attivare il refresh solamente quando c'è un effettiva modifica del contenuto della finestra. Questo evita futuri rallentamenti (un refresh al secondo invece di quaranta su mappa, qui non fa la differenza ma in altri script più complessi la fa).

Comunque lo giustifichiamo perché l'ha fatto di fretta senza leggere la classe della finestra. :sisi:

 

p.s. manca pure il dispose della finestra >:| ( :*** ) (( però manca davvero >:| ))

 

 

@khan:

 

Parto dal 2° Metodo: non so bene perché ti dia l'errore, probabilmente fa dispose ad un oggetto già "disposato"e quindi ti implode. In ogni caso mi auto-cito da una risposta a lord bel di prima:

"Non so dirti per certo se sia effettivamente peggio o altro, ma io eviterei totalmente di mettere delle inizializzazioni di oggetti all'interno di un loop. Personalmente credo sia molto meglio tutti gli oggetti all'interno dell'initialize/main". Insomma, come metodo sto qui non va per nulla bene.. XD

 

1° Metodo: ok, così ci siamo.. ti do un suggerimento che potrebbe sbloccarti la situazione: esiste un attributo delle finestre di tipo accessor (modificabile e leggibile quindi) che permette di modificare la visibilità della finestra.

Esempio: @wintime.visible = true oppure @wintime.visible = false

In questo modo ti imposti un'opacità per quando visible è true, e se lo cambi in false la finestra sparisce del tutto.

p.s. no scordarti l'aggiornamento della finestra all'interno dell'update di scene_map

 

 

@tio

 

Tio ** mi sembra di essere tornato su rgss world (ricordi? XDDDD)

Tornando a noi... il ragionamento così a sentimento funzionerebbe.. c'è da dire però che a livello pratico non va per nulla bene. I nuovi oggetti vanno creati praticamente sempre all'interno di initialize/main, creare e distruggere un oggetto continuamente è un lavoro piuttosto impegnativo per il programma. Quindi la strategia più adatta è creare quando la scena viene chiamata e distruggere quando si sta uscendo dalla scena, quindi l'operazione viene eseguita una sola volta. A questo punto hai la tua finestra sempre presente a schermo e dovrai pensare a qualcosa per farla sparire.. senza effettivamente distruggerla *tossicchia*.. L'esca l'ho lanciata, mo aspetto che abbocchi. ;O;

Link to comment
Share on other sites

uhm, capito.. avevo già intuito la cosa, poi ho visto la soluzione per avere la conferma XD

 

non mi ero nemmeno accorto che c'era il main (mi era sfuggito XD )..

tutto chiaro cmq.

e se volessi fare che si sente pure un effetto sonoro quando premi il tasto Z, basta aggiungere il comando apposito in update oppure è necessario creare un nuovo metodo come per call_menu? (anche se credo che volendo si possa fare tutto da def update, anche se viene un po' incasinato XD )

 

(bei tempi quelli di rgss world su forumfree cmq ç_ç XD

"Dopo gli ultimi Final Fantasy, ho capito solamente una cosa: che il gioco è bello quando Nomura poco."

Making is not dead. You are dead.
RELEASE: La Bussola d'Oro | Download | Video di anteprima - La Partenza di Hanna

http://i.imgur.com/cFgc2lW.png

Prova Standrama!

Link to comment
Share on other sites

Se vuoi aggiungere un suono probabilmente lo vuoi aggiungere quando premi il tasto.. quindi considerando che per attivare un effetto sonoro basta una riga di codice penso sia chiaro dove questa vada messa.. :D

 

Prova a farlo anyway ò_ò

Link to comment
Share on other sites

  • 1 month later...

Non mi sembra tanto più facile del 3... comunque posso provare...

Da perfetto ingorante in materia di script quale sono, ho combinato un pasticcio xD

 

 

Ho creato una classe sopra main e ci ho incollato questo:

if input::A

def initialize

super(0, 0, 160, 96)

self.contents = Bitmap.new(width - 32, height - 32)

self.contents.clear

self.contents.font.color = system_color

self.contents.draw_text(4, 0, 120, 32, "Tempo di Gioco")

@total_sec = Graphics.frame_count / Graphics.frame_rate

hour = @total_sec / 60 / 60

min = @total_sec / 60 % 60

sec = @total_sec % 60

text = sprintf("%02d:%02d:%02d", hour, min, sec)

self.contents.font.color = normal_color

self.contents.draw_text(4, 32, 120, 32, text, 2)

end

end

L'if sono riuscito a scriverlo io, il resto è spudoratamente copincollato.

Ho confrontato con la soluzione e non c'entra nulla xD

 

 

 

Edited by DracoMT2

http://img396.imageshack.us/img396/5114/bannerqj2.jpg

 

And the Dragon will Rise with the Twilight Star...

...again.

 

Sei nuovo? Leggi qui.

 

http://img505.imageshack.us/img505/210/banneradtnewnt7ew3.jpg

Link to comment
Share on other sites

Uhm... in effetti ci sono molte cose che ti sono poco chiare... e in effetti me lo ricordavo più facile sto laboratorio.. XD

 

Hai letto le lezioni che ho fatto eoni fa? Forse quelle ti possono dare le basi giuste per capirci qualcosa. :P

Link to comment
Share on other sites

 Share

×
×
  • Create New...