-
Posts
221 -
Joined
-
Last visited
Content Type
Profiles
Forums
Calendar
Posts posted by Lomax_Iced
-
-
Ecco ora io vorrei quotare quel video con un like è non possso farlo!! xD
-
Si ok. Io addirittura penso che un forum sia anche meglio di un social. Però è anche vero che se mi va di scrivere mi metto lì e scrivo la mia. Però alle volte capita che quello che volevi dire l'ha già detto qualcun'altro e allora lo trovo inutile creare un altro commento con scritto soltanto 'quoto tizio', solo per soddisfare quel bisogno di dimostrare solidarietà nei confronti di quell'idea o quel concetto già espresso. E' spreco di tempo.
Io mi sono trovato spesso in circostanze simili e mi è mancata l'opzione 'like'.
Al contempo lo trovo inutile quando lo si usa per apprezzare una realizzazione di qualsiasi tipo. Anche perché per l'autore penso sia più gratificante leggere un commento con su scritto l'apprezzamento piuttosto che trovarsi un'accozzaglia di numeri di like che si accumulano in un angolino.Io almeno la vedo così.. poi fate voi.
-
Ad rpg2s mancano i 'Mi Piace' di facebook o di youtube. Non sono inutili e adesso spiego perché.
Alle volte entrando nei post, leggo commenti che quoto in todos, però mi secca creare una risposta scrivendo soltanto 'quoto flame' o 'quoto caio'.
Sarebbe più immediato e comodo mettere un bel 'mi piace' sui commenti o interventi degli altri utenti.
Lo trovo invece inutile ed offensivo, mettere il 'non mi piace', perché non è costruttivo.
Cioè inserire un semplice non mi piace senza dovuta spiegazione, potrebbe infastidire e basta.
Un'altra cosa che va assolutamente aggiornata è la pagina iniziale del sito (non la home del forum).
E' arcaica di chissà che secolo. Secondo me non bisogna abolirla perché è un'ottima vetrina, però non è curata.
Va aggiunta la sezione Rpg Maker Mv completamente assente.
Aggiornare le risorse free da scaricare oppure omettere completamente la possibilità di farlo, anche perché i contenuti sono pieni di polvere.
Come dire fare pulizia sbarazzo e aprire le tende e far entrare luce.
E niente e basta. Poi c'è tutto.
-
Prova qui. Però sono Character non Battlers
http://forums.rpgmakerweb.com/index.php?/topic/47335-chalkdust-resources/ -
Suoni
in Supporto MV
Dunque proverò a seguire il percorso, passo dopo passo. Per capire un pochettino come stanare l'errore:
(Seguo i percorsi standard di window seven)
C:/utente/Documenti/Games/'NomeProgetto'/audio/
Una volta qui dentro ci sono le 4 cartelle che ospitano le 4 tipologie di file.http://i64.tinypic.com/1to6fr.jpg
A noi interessa la prima: bgm .
Apriamola.
Al suo interno troveremo:
http://i63.tinypic.com/21oghs.jpg
Una lista di file in doppio formato.
Ovvero: .m4a e .ogg .
Quindi per inserire un nuovo file musicale, all'interno di questa cartella occorrerà possedere lo stesso file in entrambi i due formati.
Facciamo una prova:
Io solitamente faccio così:
1.scelgo un file musicale che mi piace (solitamente mi preoccupo che sia ad uso libero o se proprio mi piace contatto l'autore)
2.uso Free Audio Mp3 Converter. Un programma gratuito che mi permette di convertire lo stesso file nei due formati che mi necessitano. Poi ovviamente ognuno può usare quello che più gli fa comodo.
3.una volta ottenuti i file li Taglia/Incollo dentro la cartella bgm.
4.aggiorno la cartella.
5.vado su RpgMv e tramite il tool vado nel Database
6.Poi su Sistema (Terza voce partendo dal basso)
7.Dopo di che seleziono la musica che mi interessa dal riquadro Musica e l'assegno a cosa mi interessa.
Altrimenti vado su
7Mappa/tasto destro del Mouse/Modificare/Spunto l'opzione AutoplayBgm/ e scelgo da lì la mia nuova musichetta.
Nulla di più semplice.
Fammi sapere se ti da ancora errore. -
Si si. il fattore plugin.js a me dava problemi prima di capire che fosse quello lì su il vero problema.
Perché nella lista dei plugin, nella cartella avevo nominato il File Salta Titolo.js e nel file stesso c'era invece '00SaltaTitle' quindi
Era come voler far accendere una Playstation 4 senza attaccare la spina. capiscimi bene :D
'Non mettere spazi' perché proprio perché devono coincidere, poi nello script occorre che entro le virgolette ci siano parole concise e senza spazi, altrimenti poi il tool rompe un po.
'Non parole troppo lunghe' sempre per lo stesso discorso. Questa seconda cosa è un po meno importante della prima, piuttosto la dico per comodità di compilazione. -
Scusa, ma c'è un errore...
A me non funziona... va sempre al menù sia che metto si che metta no.
Si lo so. Lo faceva anche a me. Ci perdevo la salute. Ma la soluzione è la seguente:
1.
Intanto quando nomini lo script non mettere spazi. Robe tipo
Salta Titolo.jsnon sono concesse.Nemmeno titoli estremamente lunghi tipo
Modalitapersaltareiltitolodigioco.jsanche questo non va bene.2.
Sii coerente, ovvero fa concidere questo:
http://i63.tinypic.com/330aecz.jpg che sarebbe il nome del tuo script.
Con quest'altro:
http://i67.tinypic.com/23sc2vl.jpg
Devono avere i nomi uguali.
Quella dichiarazione lì dello script indica che in game verranno presi in considerazione i parametri di quello script specifico.
Questa stringa è fighissima! e la potrete utilizzare in un casino di vostri script creati da voi. E' come se darete l'ok, l'approvazione,
il consenso per poter utilizzare e modificare i valori delle variabili, utilizzando la gestione plugin del tool rpg maker mv.
Siengried tu mi pare che volevi trovare un modo per cambiare valore ad una variabile in gioco.
Mi sto studiando la cosa. Non ti ho ignorato. Mi sto studiando la cosa bene. Ti farò sapere. :)
-
Grazie
Ok Mak seguirò il consiglio.
A domani -
Già vero come mai il sito è abbandonato?
Scusate l'ot. Però il forum ok bene o male è attivo. Ma la pagina www.rpg2s.net e basta è ferma da non so quali arbori.
Bisognerebbe aggiornarla, inserendo anche la vocina Rpg Maker Mv. Vabbe chiudo il mio Ot. -
Borderline, Asperger. La prima l'ho studiata per imparare a capire la mia ragazza, della seconda ne ignoravo totalmente l'esistenza. Comunque da come l'hai descritta sembra molto simile.
Anche lei piange praticamente per qualsiasi cosa. Da ciò se ne deduce che è molto sensibile. Non sopporta la gente che grida, tanto che entra in uno stato di agitazione. Il suo sonno è incostante.
Questa estate, dormendo insieme, una notte si svegliò di soprassalto facendomi venire letteralmente un 'cacazzo' perché di colpo non riusciva a capire dove si trovasse e con chi era.
Non è abituata a dormire al buio. E' dislessica e ha difficoltà con la matematica. Lenta nel fare delle operazioni semplici. E fraintende facilmente le cose, come le trame dei film, non cogliendo i significati
più celati. Prima di conoscermi, il senso dell'umorismo in lei era a zero. E' molto logica e pragmatica. Vedo molte similitudini in te.
Però so che la mia ragazza in passato si è lasciata trascinare da cattive compagnie. Soprattutto un ragazzo che non l'ha saputa rispettare. Per questo voglio metterti in guardia.
Nel senso di stare attenta a certa gente che può sfruttare la vostra condizione e proporvi le cose più becere. Lo so che è troppo diretto però preferisco parlare in maniera molto schietta.
Stai attenta ai falsi.
Circondati di persone che ti dimostrano affetto. Non che ti dicono che ti vogliono bene, ma che ti danno del bene senza per forza avvisarti che lo stanno facendo oppure ricordarti che l'hanno fatto.
Chi fa così non è mai sincero. ma se lo fa, lo fa perché si aspetta da te qualcosa in cambio.
Fai Karate e sono sicuro che meni forte. Io invece sono una pippa. Nel senso che sono scarso nella lotta.
Per esserti iscritta in un sito del genere si vede che sei creativa. E penso che ti sei cimentata in qualche disegno, musica o script/plugin, (non bastano mai gli scripter :rolleyes: )
Quindi Tosta sei tosta e Sensibile. In più sei logica, quindi razionale. Capace di determinare cosa per te è giusto e cosa è sbagliato. Good.
Fa di queste cose una forza e il tuo baricentro.
Capito questo, quando vieni investita da queste sensazioni negative (e ti butti giù), armati delle tue capacità e convinciti che sei una di noi. Ne superiore e ne inferiore a nessuno. Ma semplicemente tu.
E soprattutto affidati al tuo istinto. Ma non quello che ti tira giù, no quello. Usa invece quell'altro, quello che ti fa sopravvivere ad uno scontro mentre fai karate.!
-
Date un boccale di birra a quel folletto! xD
Questo è parlare! -
Salve gente eccomi con un nuovo tutorial dedicato a RpgMv. :D
Vi spiego, momentaneamente mi sto dedicando a implementare nuove risorse nel Generatore di Personaggi.
Ora, le risorse che sto mettendo appartengono ad altri. Ma il quesito è: -"E se volessi crearle da zero?!"-
. . .
Quindi in base a questo, ho pensato di creare un tutorial inerente l'argomento:
---------------------------------------------------------------------------------------------------------
1. Capire i Gradients:Questo file si trova tendenzialmente in:
C:/Programmi/Kadowaka/RPGMV/Generator
http://orig15.deviantart.net/c7f7/f/2015/298/8/1/gradients_by_hminth-d9echy5.png
Questo qui sopra è il modello che utilizza il tool per assegnare i colori che noi andremo a scegliere per modificare le varie risorse.
E' una tabella, ed essendo tale, è un vero e proprio schema. Proverò a decifrarlo:
Reso conto:Pelle = 17 colori + trasparenza Testa = 23 colori + trasparenza Occhi = 12 colori + trasparenza Resto = 17 colori + trasparenza
Questo è l'ordine in cui li vedremo rappresentati nel tool.
Però vediamo qual'è l'ordine effettivo rappresentato in quella tabella posta in alto:
(Bisogna leggerla dall'alto verso il basso).Testa = 23 colori poi c'è un separé bianco Occhi = 12 colori Pelle = 17 colori Resto = 17 colori
Conoscendo quest'ordine possiamo finalmente decifrare a nostro comodo il file immagine Gradients.png.
. . .
Bisogna fare una considerazione:
La suddetta immagine non può essere modificata nelle dimensioni. Voglio dire che le sue proporzioni devono restare tali.Pertanto le modifiche dovranno limitarsi soltanto al cambio dei colori. Un mio consiglio, per avere molteplici possibilità di scelta,
può essere quello di salvare nella cartella Generator, più file gradients.png, magari nominandoligradiens.png gradiens1.png gradiens2.png gradiens3.png ecc
In questo modo avrete più colori a vostra disposizione. Ricordatevi sempre che il file che verrà considerato dal programma sarà sempre quello nominato gradients.png . Dunque basterà rinominare le immagini a seconda delle tinte che vorremmo usare.
Quindi dicevamo, non bisogna modificarne le dimensioni.
Pertanto le grandezze sono le seguenti: 256x280 .
Ogni singola striscia è: 256x4 .
Le sfumature di colore dovranno essere assemblate sempre dalle tonalità più chiare a quelle più scure, lette da sinistra verso destra.
A sinistra i toni più chiari, a destra quelli più scuri. I toni più chiari rappresenteranno il 'Foreground', ovvero il colore predominante.
Invece le tinte più scure il 'Background', ossia le ombreggiature.
2. I 4 spriteset:
Una volta aperto Rpg Maker Mv ed entrati nel Generatore dei Personaggi, possiamo notare che seguendo le nostre scelte riusciremo a modificare l'aspetto di 4 file immagine differenti. Ovvero:
I Faces:
Il loro template è un immagine grande 576x288 . Può ospitare fino ad otto pose.
Ed è il seguente:
http://i63.tinypic.com/i3i0yp.jpg
Ciascuna avente le dimensioni di 144x144:
http://i67.tinypic.com/2qxydxf.jpg
Questo facilita di molto la caratterizzazione, poiché potete creare più pose espressive dello
stesso personaggio. Oppure come avviene di default, più personaggi in un unico template.
(momentaneamente non scendo nel dettaglio, però più in là spiegherò come si fa a realizzare
un'immagine del genere utilizzando solo il Generatore dei personaggi e nessun altro editor).
Ma passiamo avanti..
. . .
I Characters:Benissimo ho appena appreso che imageshack è diventato a pagamento, comuunque..
http://i66.tinypic.com/2uscrd4.png
L'immagine è grande 576x384 e può ospitare fino a otto elementi (personaggi).
I characters solitamente sono immagini che ritraggono i quattro spostamenti che effettua il personaggio.
Una singola celletta che ospita una posa di un elemento è grande 48x48 .
http://i63.tinypic.com/2wob1pd.jpg
Ogni elemento è formato da 12 pose.
Con ciò possiamo determinare che ogni singolo slot che ospita le 12 pose del singolo personaggio è grande:144x192, così:
http://i67.tinypic.com/2rnk19e.jpg
Le prime 3 cellette orizzontali poste in alto ritrarranno le pose dello spostamento dall'alto verso il basso.
Scendendo sotto, le seconde 3 caselle orizzontali, raffigureranno la camminata da destra verso sinistra.
Scendendo ancora le altre 3 pose orizzontali, raffigureranno lo spostamento da sinistra verso destra.
E le ultime 3 pose in basso, invece, ritrarranno il personaggio mentre cammina dal basso verso l'alto.
Questo è lo schema di base. Poi tramite plugin ed interventi esterni si possono anche modificare questi assetti.
Però, comunque per concludere questo punto, vi do anche il template degli otto characters ospitati nel file immagine di default,
ovvero come siamo abituati a vederli racchiusi nella loro apposita cartella:
576x384:
http://i66.tinypic.com/2gui0ia.jpg
Per ora non dico altro sull'argomento, lo riprenderò dopo.
Pertanto continuiamo con l'analisi delle altre immagini che andremo ad assemblare oltre le due appena descritte.
Quindi rimanendo fedeli al listato..:
NOVITA' di RPGMV!
I Character Morenti:
Ritraggono appunto le pose di un personaggio che subisce un danno fatale.
http://i64.tinypic.com/15pftzc.jpg
Vengono usate le stesse dimenzioni dei comunissimi characters citati in precedenza. Pertanto le dimensioni dei template della singola celletta (48x48) e quelle di tutto l'insieme (576x384) sono le stesse. L'unica cosa che cambia è la dimensione del singolo slot che ospita appunto questa tipologia di pose.
Ovvero (144x48):
http://i64.tinypic.com/4t1zlx.jpg
Senza dilungarmi oltre..
L'ultimo file immagine che andremo ad assemblare attraverso il nostro Generatore di Personaggi è..
Il Battler laterale:
http://i68.tinypic.com/11lo75v.jpg
Ossia quell'insieme di pose che raffigureranno in game i movimenti del personaggio in fase di battaglia.
Anche qui l'immagine nel suo insieme è grande 576x384. Ma cambiano le dimensioni della celletta che
ospita una singola posa. che non è più quarantotto per quarantotto ma...
è un bel dilemma.. dato che convenzionalmente si dice che la dimensione di una singola cella battler sia 64x64.
Ma non è esattamente così. In realtà per larghezza è 64,3periodico e altezza 63, qualche cifra.
Con queste grandezze non si può determinare un quadrato effettivo, però freghiamocene e per semplificare il tutto,
diciamo pure che la cella è grande 64x64 .
http://i67.tinypic.com/j6hmye.jpg
In questo modo avremo che un singolo slot composto da tre pose ciascuno, sarà grande 192x64 .
http://i68.tinypic.com/2hxru4l.jpg
Ogni slot da tre pose indica una fase della battaglia.
Pertanto ha un ordine schematizzato. Su internet gira questo template:
http://i.imgur.com/OB0rLBf.png
forza Archeia! :D
Io ho tradotto il tutto così:
http://i66.tinypic.com/wbucer.jpg
ho fatto del mio meglio..ci ho provato. comunque..
Quindi quando operiamo all'interno del nostro Generatore di Personaggi, adesso abbiamo ben chiaro che andremo a modificare le grafiche di queste 4 tipologie di Sprites (immagini).
3. Le cartelle Face; SV; TV; DTV; e Variations:Una volta recati in
C:/Programmi/Kadowaka/RPGMV/Generator
Avremo davanti a noi questa visione:
http://i67.tinypic.com/rans42.jpg
Gradients.png abbiamo già avuto modo di analizzarlo. Non credo ci sia bisogno di dire dell'altro.
Le 5 cartelle invece ospitano tutti gli elementi che avrete a vostra disposizione
per poter modificare, attraverso il Generatore di Personaggi, appunto i vostri beniamini.
Dunque, proviamo a fare un unboxing dei vari folder. Ed incominciamo proprio dalla cartella..
Face:
Dentro di essa ci sono altre 2 cartelle:
http://i66.tinypic.com/10ii7ap.jpg
Donne & Uomini
Sono quasi identiche, differiscono solo per alcuni file immagine, dalle anatomie diverse.
Comunque, a caso, apriamo Donne e vediamo che troviamo:
Il tutto si presenta in questo modo:
http://i64.tinypic.com/25oxqir.jpg
Un'accozzaglia di strani files dai nomi disparati. E' uno schema anche questo.
Paradossalmente, anche se non sembra, questi files sono messi in ordine.
Proviamo a capirne il senso:
Abbiamo..
ad esempio:FG_AccA_p00_c1_m000.png //Accessorio 1 FG_AccB_p00_c1_m000.png //Accessorio 2 FG_BeastEars_p00_c1_m000.png //Orecchie di animale FG_Body_p00_c1_m000.png //Diciamo Busto FG_Cloak1_p00_c1_m000.png //Mantello FG_Clothing_p00_c1_m000.png //Abbigliamento FG_Ears_p00_c1_m000.png //Orecchie FG_Eyebrows_p00_c1_m000.png //Sopracciglia FG_Eyes_p00_c1_m000.png //Occhi FG_Face_p00_c1_m000.png //Volto FG_FacialMark_p00_c1.png //Segni sul viso FG_FrontHair_p00_c1_m000.png //Ciuffo o frangia (capelli anteriori) FG_Glasses_p00_c1_m000.png //Occhiali FG_Mouth_p00_c1_m000.png //Bocca FG_Nose_p00_c1_m000.png //Naso FG_RearHair_p00_c1_m000.png //Chioma (capelli posteriori)
Queste elencate sono le tipologie di fattispecie degli elementi che costruiscono quello che poi sarà il nostro face.
Nel tool il tutto si presenta in questo modo:
http://i65.tinypic.com/o79apg.jpg
Dimenticavo di dire che nella cartella Male(ossia Uomini) vi sono presenti anche i file immagine FG_Beard_p00_c1_m000.png che si riferiscono alla Barba dei personaggi maschili. E' ovvio che nella cartella Female questo non è presente.
Se potete notare nel listato vi sono anche altre voci, che presto tratteremo meglio, ma non ora. Concentriamoci in Face.
Prendiamo ad esempio il primo file immagine e tentiamo di decifrarne la nomenclatura:
FG_AccA_p00_c1_m000.png
tralasciando .png che è l'estensione del file immagine, abbiamo la qui presente sigla alfanumerica: FG_AccA_p00_c1_m000
FG
Indica che il file appartiene alla cartella Face, quindi verrà considerato tale.
AccA
Preannuncia che si tratterà di un Accessorio 1.
Quindi quando nel tool andremo a selezionare la voce 'Accessorio 1' se tutto si è svolto a buon fine avremo il nostro file catalogato come accessorio 1.
p00
Indica che numero è. Come se tutti questi files fossero accodati. Quindi se notate troverete files in p01 oppure p02 o p03 ecc.
c1
Sta ad indicare la parte che completa quell'accessorio. Vi faccio un esempio:
http://i65.tinypic.com/23j49ar.jpg
Entrambe le immagini formano lo stesso accessorio, solo che sono divise in due parti. Appunto c1 e c2.
Poi nel face verranno visualizzate nel loro insieme. Questo permette appunto di determinare che quell'elemento è composto da più parti. Il dividere l'elemento in più parti, aiuta a garantire una personalizzazione migliore. Ovvero si possono modificare più tinte di colore, scegliendo appunto a nostro piacimento che ad esempio c1 sia verde e c2 rosso. Però il dato effettivo che gestisce 'il poter colorare i due elementi separatamente è proprio il seguente..
m000
Questo dato, serve a gestire appunto la possibilità di poter modificare la tinta agli oggetti. Se si dovesse omettere, quindi nominando il file in questo modo: FG_AccA_p1_c1.png l'immagine perderebbe la sua capacità di poter essere modificata nel colore.
Quindi noi non omettiamolo. Vediamo invece che cosa succede:
Allora poniamo in esame FG_AccA_p1_c1_m013.png .
Provando a decrescere il valore emme, riducendolo a m012 o più basso, il generatore crasherà.
Se lo si aumenta, facendolo diventare m015 oppure m016 Si vede che anche se si cambiano i gradienti, il face ignora totalmente il tentativo di modifica del colore. Questo mi fa pensare che non si tratta di una scala di valori.
Analizziamo più affondo la cartella Face.
Abbiamo che ai files FG_AccA_px_c1 (dove px = corrisponde ad un file qualsiasi) ma che sia parte1 (c1) , viene abbinato m013 .
Ovvero per esempio il colore della fibbia della cintura potrà essere modificato attraverso questo dato: m013 .
Poi abbiamo che ai files FG_AccA_px_c2, corrisponde il dato: m014 .
E fino a qui tutto bene.
Poi si passa a FG_AccB_px_c1/c2/c3 e magari anche c4 è i valori mutano.
Vi faccio 2 esempi:
Il primo è questa immagine che raffigura due elementi:
http://i63.tinypic.com/2v0lr4o.jpg
L'insieme è un copricapo appartenete alla categoria degli accessori2; è composto da due parti. Ciò significa che potremmo operare, cambiando il valore ai gradienti in entrambi i due oggetti che compongono l'insieme.
In questo caso a c1 corrisponde m016, mentre a c2 m017.
Ma vediamo un altro esempio, che raffigura questa volta molte più parti:
http://i66.tinypic.com/1zxw6kz.jpg
Come vedete questa volta a C4 corrisponderà m016; a c3 m018; a c2 m019; ed infine a c1 m017.
Ciò signidica che a comandare l'operazione di recolor è proprio emme. Che assegna le priorità.
Proverò adesso a modificare l'ordine di emme corrispettivi ai quattro files del secondo esempio e vediamo che succede:
Dunque lasciando però stare per adesso tutto per com'è, abbiamo questa immagine:
http://i65.tinypic.com/2d7ihxf.jpg
Proviamo a modificarla così (In questo caso 'Colore secondario 1' corrisponderà a C1 a cui abbiamo dato valore m017, mentre
'Colore secondario 2' corrisponderà a C3 ovvero m018. Selezionate nel Generatore il dato corrispondente a C1, ovvero prima striscia in basso, terzo colore. Mentre C3 sarà prima striscia in alto, primo colore a destra.
otterremo queste variazioni:
http://i64.tinypic.com/2hoz3pj.jpg
Adesso proviamo sul serio a scambiare i valori emme, tipo: a c1, m018 e a c3, m017. Vediamo che succede:
Ecco che l'immagine cambia ulteriormente:
http://i66.tinypic.com/2vw61hv.jpg
Quindi alla luce di quanto appreso, fino ad ora, i valori di emme sono legati a C, ovvero alle parti che costituiscono l'insieme.
E la priorità che assegnano gestisce solamente le attenuazioni chiaro/scuro. Ovvero viene determinata quale parte ospiterà il colore predominante (Il così definito Foreground) e quale il Background ovvero le ombreggiature. Questo per dare una profondità all'immagine finale (al Face)
Spero di aver reso chiaro il concetto sino a qui.
Non credo abbiano un ordine numerologico, come si è potuto appurare, ne crescente e ne decrescente, credo che si basino soltanto
Sul Maggiore/Minore/uguale. Ovvero per esempio: C2 è Maggiore di C1 ma Minore di C3 quindi il gradiante dovrà essere compreso
tra i valori tipo C1 è m018, C2 è m019 però C3 è m020.
Se volessi scrivere, C1 = m013 il generatore crasherebbe. Se invece avessi voluto scrivere C1 = m022 il dato sarebbe stato ignorato.
Un altra cosa importantissima inerente appunto gli emme. E' che nel Generatore di Personaggi, sono rappresentati attraverso
questa finestra qui:
http://i66.tinypic.com/2lcbp7l.jpg
Ad esempio in questo casoa Colore Principale corrisponderà C4 a Colore Secondario1 corrisponderà C1 a Colore Secondario2 corrisponderà C3 a Colore Secondario3 corrisponderà C2
Ma l'ordine varia a seconda di quante parti è composta l'immagine d'insieme.
SV:
Anche in quest'altra folder troveremo le due sottocartelle Donna e Uomo . Anche qui, entriamo a scelta su una delle due cartelle,
ad esempio Female e vediamo cosa si cela al suo interno:
Bene. :smile:
Momentaneamente stoppo qui. Grazie per i complimenti, mi spiace solo non essere più lesto nel finirlo, però ci sono tante cose da dire, che ancora non ho condiviso, però ci arriverò. Spero che tutto ciò vi possa essere utile e raga anche se è un ripetermi,io per adesso stoppo qua, il sonno inizia a tuppuliare sulla porta. Domani sera, continuo con il resto del tutorial. Notte zzZ )

Ah corretto il template. Aggiunto il termine Sparare :) -
La mia ragazza soffre della sindrome di Bordellain (<-Non ho la più pallida idea di come si scrive e mi secca cercarlo).
Soffre di crisi di ansia che le fanno palpitare il cuore forte e veloce e se ciò non bastasse si vede sempre brutta, inferiore ed incapace rispetto al mondo intero.
In passato, quando ancora non stavamo insieme, (ancora non la conoscevo) ha abusato di se stessa. Prima Mangiando in maniera spropositata, fino a sfiorare l'obesità, poi digiunando e a perdere peso in maniera eccessiva. Mi racconta sempre che giunse ad un certo punto nel credere di non provare più alcun dolore.
Pertanto provava a procurarselo da se, ferendosi. Ad oggi, continua ad avere ben visibili le cicatrici dei propri sbagli, e continua a vergognarsene.
. . .
Vi sto raccontando una cosa così nuda e cruda, per farvi riflettere.
. . .
E' da un anno che stiamo insieme e devo dire che all'inizio è stata dura scardinare in lei il pensiero di essere inferiore rispetto a chiunque. Qualche volta ha delle ricadute ma sono sempre più rare. Però con pazienza e costanza, le sto vicino e la riporto su.
Eppure non capisco. Obbiettivamente parlando, lei non è brutta. Non lo dico solo perché sono il suo ragazzo, perché obbiettivamente lo è. (nel senso che spesso devo risolvere delle questioni di tipi che si sventano le idee e li devo mettere apposto xD) eppure lei si vede sempre brutta e se ne vergogna.
Poi è pure una ragazza forte. Per quello che ha passato ne è comunque uscita in piedi. Rispetto magari a quelle altre persone che magari lei reputava meglio, ma che non sono riusciti a maturare e oggi sono ancora nel tugurio.
Bella è bella. Forte è forte, eppure lei non lo vede.
Ha un orecchio assoluto.Nel senso che è in grado di riprodurre una melodia sentendola una o due volte, e questo fa si che è una brava pianista.
Crea quadri dal nulla e sono pure bellissimi. Eppure nonostante tutto ciò, si reputa un'incapace e ne soffre.
. . .
Non volevo vantarmi della mia ragazza, ma vi ho detto anche queste cose, per condividere con voi una mia riflessione, ovvero che spesso chi si crede inadeguata rispetto al mondo intero, spesso nega l'evidenza dei fatti.
. . .
Ora come si può ovviare?
Secondo me la si risolve così:
Per esempio Shiki, se ci stanno tutti o qualcuno (ne basta anche uno) che ti conoscono e che valorizzano le tue qualità e magari tu ti vedi allo specchio e sei convinta/o che non è così ma invece è tutto l'opposto. Stai sicura/o che quelle persone lì non ti vogliono vedere a terra, grassa o secca, in ansia e male.
Magari per te non fa differenza. Ma per loro è importante vederti serena/o.
Quindi alla luce di ciò, dovresti considerare il fatto che forse non hanno tanto torto. Una volta resoti conto di tal cosa. Inizia a fare una vera e propria lista delle cose positive (per te e per gli altri) che sai fare, in generale. E se non te ne ricordi qualcuna fatti aiutare da chi ti vuole più bene, loro lo sapranno sicuro. Perfetto quelle sono le tue qualità.
Ora come vedi anche tu le possiedi. Come tutti noi dentro questo forum e fuori da questo internet. Non sei diversa/o da qualcuno. Eccelli magari in qualcosa e in qualcos'altro no, ma tutti quanti noi in linea di massima siamo combinati così. Quindi.. :smile: -
Non ho progetti in limbo. Ne ho uno solo in cui ci sto lavorando. Però peccato, per quel che ho visto, avete tante demo e niente più. Come se ad un certo punto non ci credete più.. Potreste, fare tipo che vi dedicate ad un progetto e realizzate la prima quest, (nel dettaglio, in tutto) poi stop e dopo un altro po passate alla seconda, e così via. Perché in questo modo, ok siete svelti a realizzare un minigame o un progetto incompleto, però poi dopo una certa lo abbandonate. Se procedete piano piano
forse ci riuscite a pubblicare qualcosa. Anche riprendere vecchi progetti e riportarli alla luce, curandone i dettagli. Un vero peccato perché il talento c'è. -
Ahahah xD
No. io sono quello che fa la bitbox punz punz bruuuu xD
Comunque quoto Another :sleep:
-
Il lato ..orno xxx di Rpg2s...non sapevo vi fosse la sezione xD
-
Quoto il ModRosso..(che intanto è diventato Admin e non me n'ero accorto! Ma quando sei diventato admin? :D) Comunque non andiamo OT:
Volevo congratularmi con Shido per la sua iniziativa. Grazie per condividere il tuo sapere con tutti noi! :smile: Ottima idea -
Grazie ragazzi del sostegno! :D
Mi diverte un mondo andare alla scoperta e attuare determinate cose.E poi non vedo l'ora che voi finiate i vostri progetti così posso giocarci. Che mi mancano gli rpg seri e fatti bene.
Comunque ho aggiornato il primo post. Faccio un resoconto:
1.Inserire uno sfondo in SceneTitle2.Inserire una cornice in SceneTitle.
3.Modificare l'ampiezza della finestra in cui verrà inserito il titolo del vostro progetto.4.Modificarne la posizione (attraverso le coordinate X e Y) ^^^^^^^^^^^^^^^^^^^^^^
5.Determinare la grandezza del Font, il tipo, il colere dei bordi, l'ampiezza dei bordi, il colore di riempimento.
6.Modificare la Posizione della vostra immagine di Sfondo, attraverso le coordinate X e Y.
7.Aggiungere un comando in più al vostro Scene_Title. (così impostato vi da la possibilità di Uscire definitivamente dal Game.ini (vabbé non è più ini, ci siamo capiti)
8.Potete Modificare la Posizione della finestra che ospita i comandi principali, attraverso le coordinate X e Y.
9.Potete Modificare la larghezza della suddetta finestra.
10.Potete Modificare l'altezza della vostra finestra.
Per il momento mi fermo qua. Però ho intenzione di scoprire dell'altro. Ovviamente se avete fatto anche voi qualche scoperta e la volete inserire qui. Condividete pure. :)
In caso voleste segnalarmi qualche errore, commentate sono tutto orecchie :smile:
Bella raga a presto
-
C'è un errore nel cast, il tipo di arrivo è Number, non number:
var parameter =number(parameters['Parametro1'] || 0); var parameter = Number(parameters['Parametro1']);
Per non confondere chi come me ha preferito lasciare 1/0 per on/off :P
Grazie della segnalazione :smile:
Correzione Fatta

-
Ciao raga. Dunque quanto inserirò in questo post non è ne un plugin completo e ne un tutorial. Ma voglio condividere con voi una serie di mie scoperte che ho fatto pasticciando con il linguaggio Javascript.
(Non so se è questa la sezione giusta. In caso non lo fosse, mi scuso)
Dunque per chi non vuole riempire il proprio Gestione Plugin di elementi esterni e magari preferisce fare delle aggiunzioni utilizzando direttamente i plugin che ha già a disposizione, vi esorto a seguire questo post. Che si andrà aggiornando ogni qualvolta scoprirò qualcosa di nuovo.
Pertanto iniziamo!
1. Per chi volesse Personalizzare il proprio Scene_Title:
Di default tutti noi abbiamo a nostra disposizione degli script che racchiudono a loro interno plurime classi.
Esattamente come nell'Rgss1/2/3, per creare una scena occorre elaborarla e costruire la finestra che la ospiterà.
Ma per evitare di farla da zero, si può ovviare la cosa, decidendo di modificare quella che già ci fornisce il programma.
Qui di seguito vi spiegherò come fare:
1. Andate tramite un vostro programma di Script editor nel folder js del vostro nuovo progetto.
(è essenziale che ne creiate uno nuovo, per fare i vostri esperimenti così da evitare di fare errori)
(per il programma di Script editor, io consiglio Sublime Text 2.
In questo link spiego come lo si può sincronizzare all'Rpg Maker Mv:)
http://www.rpg2s.net/forum/index.php/topic/20344-00-tutorial-js-editor-su-rpg-maker-mv/
Una volta aperto il vostro Script Editor, Selezionate il file rpg_scenes.js .
2. Recatevi alla riga 228.
La porzione di codice da prendere in esame sarà dalla riga 228 fino alla riga 353.
3. All'interno di questa porzione di codice recatevi alla riga 278:
Se volete Modificare lo sfondo e la cornice da far visualizzare nella Scena del Titolo:
Sostituite questo metodo:Scene_Title.prototype.createBackground = function() { this._backSprite1 = new Sprite(ImageManager.loadTitle1($dataSystem.title1Name)); this._backSprite2 = new Sprite(ImageManager.loadTitle2($dataSystem.title2Name)); this.addChild(this._backSprite1); this.addChild(this._backSprite2); };Con quest'altro:
Scene_Title.prototype.createBackground = function() { this._backSprite1 = new Sprite(ImageManager.loadTitle1("NOMESFONDO")); this._backSprite2 = new Sprite(ImageManager.loadTitle2("NOMECORNICE")); this.addChild(this._backSprite1); this.addChild(this._backSprite2); };Sostituite "NOMESFONDO" con il nome (senza estensione) del vostro file presente in img/title1 del vostro progetto
Sostituite "NOMECORNICE" con il nome (senza estensione) del vostro file presente in img/title2 del vostro progetto4. All'interno di questa porzione di codice recatevi alla riga 284:
Se volete Modificare le proporzioni della finestra (invisibile) in cui alloggia l'oggetto "Nome del vostro Titolo di gioco"
sostituite questo Metodo:Scene_Title.prototype.createForeground = function() { this._gameTitleSprite = new Sprite(new Bitmap(Graphics.width, Graphics.height)); this.addChild(this._gameTitleSprite); if ($dataSystem.optDrawTitle) { this.drawGameTitle(); } };Con quest'altro:
Scene_Title.prototype.createForeground = function() { this._gameTitleSprite = new Sprite(new Bitmap(200, 100)); this.addChild(this._gameTitleSprite); if ($dataSystem.optDrawTitle) { this.drawGameTitle(); } };5. All'interno di questa porzione di codice recatevi alla riga 292:
Se volete Modificare la posizione dell'Oggetto "Nome del Titolo del vostro Gioco"
sostituite questo Metodo:Scene_Title.prototype.drawGameTitle = function() { var x = 20; var y = Graphics.height / 4; var maxWidth = Graphics.width - x * 2; var text = $dataSystem.gameTitle; this._gameTitleSprite.bitmap.outlineColor = 'black'; this._gameTitleSprite.bitmap.outlineWidth = 8; this._gameTitleSprite.bitmap.fontSize = 72; this._gameTitleSprite.bitmap.drawText(text, x, y, maxWidth, 48, 'center'); };Con quest'altro:
//Modifica l'oggetto "Titolo di Gioco". Scene_Title.prototype.drawGameTitle = function() { /////////////////////////////////////////////// //// LOCALIZZAZIONE SUL PIANO CARTESIANO //// var x = 0; //Ascissa (coordinata x ) //// var y = 0; //Ordinata (coordinata y ) //// /////////////////////////////////////////////// /////////////////////////////////////////////////// ///// IMPOSTA LE DIMENSIONI DELL'OGGETTO //// var maxWidth = 300; //Determina Larghezza //// var maxHeight = 30; //Determina L'Altezza //// /////////////////////////////////////////////////// /////////////////////////////////////////////////// //// IMPOSTA TITOLO DI GIOCO //// var text = $dataSystem.gameTitle; //// /////////////////////////////////////////////////// //////////////////////////////////////////////////// //// IMPOSTA IL NOME DEL FONT DA UTILIZZARE //// this._gameTitleSprite.bitmap.fontName = 'Arial' //// //////////////////////////////////////////////////// ////////////////////////////////////////////////////////// //// IMPOSTA IL COLORE E LA DIMENSIONE DEI BORDI //// this._gameTitleSprite.bitmap.outlineColor = 'black'; //// this._gameTitleSprite.bitmap.outlineWidth = 8; //// this._gameTitleSprite.bitmap.outlineHeight = 8; //// ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// //// IMPOSTA IL COLORE E LA DIMENSIONE DEL TESTO //// this._gameTitleSprite.bitmap.inlineColor = 'white'; //// this._gameTitleSprite.bitmap.fontSize = 72; //// ////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// //// DETERMINA TESTO, LOCALIZZAZIONE, GRANDEZZE E CENTRALITA' DELL'IMMAGINE OGGETTO //// this._gameTitleSprite.bitmap.drawText(text, x, y, maxWidth, maxHeight, 'center'); //// /////////////////////////////////////////////////////////////////////////////////////////// };6. All'interno di questa porzione di codice recatevi alla riga 303 :
Se volete modificare la posizione della vostra immagine di Sfondo
sostituite questo Metodo:Scene_Title.prototype.centerSprite = function(sprite) { sprite.x = Graphics.width / 2; sprite.y = Graphics.height / 2; sprite.anchor.x = 0.5; sprite.anchor.y = 0.5; };Con quest'altro:
Scene_Title.prototype.centerSprite = function(sprite) { sprite.x = 408; // di default è 408; sprite.y = 312; // di default è 312; sprite.anchor.x = 0.5; sprite.anchor.y = 0.5; };
7. All'interno di questa porzione di codice recatevi alla riga 310 :
Se desiderate Modificare o Aggiungere comandi al vostro MenuPrincipale,
sostituite questo Metodo:Scene_Title.prototype.createCommandWindow = function() { this._commandWindow = new Window_TitleCommand(); this._commandWindow.setHandler('newGame', this.commandNewGame.bind(this)); this._commandWindow.setHandler('continue', this.commandContinue.bind(this)); this._commandWindow.setHandler('options', this.commandOptions.bind(this)); this.addWindow(this._commandWindow); };Con quest'altro:
Scene_Title.prototype.createCommandWindow = function() { this._commandWindow = new Window_TitleCommand(); this._commandWindow.setHandler('newGame', this.commandNewGame.bind(this)); this._commandWindow.setHandler('continue', this.commandContinue.bind(this)); this._commandWindow.setHandler('options', this.commandOptions.bind(this)); /////////////////////////////////////////////////////////////////////////////////////////// ///// NUOVO COMANDO CREATO DA ZERO //// this._commandWindow.setHandler('Shutdown', this.commandExitGame.bind(this)); //// /////////////////////////////////////////////////////////////////////////////////////////// this.addWindow(this._commandWindow); };Il mio consiglio è di non tradurre i nomi imposti sotto gli apici, perché tradurli recherebbe qualche fastidio.
Piuttosto usate questa porzione di codice per aggiungere (se lo volete ) qualche comando in più.8. All'interno di questa porzione di codice recatevi alla riga 318 :
Se volete cambiare la meta di destinazione, una volta selezionato il comando NuovaPartita,
sostituite questo:Scene_Title.prototype.commandNewGame = function() { DataManager.setupNewGame(); this._commandWindow.close(); this.fadeOutAll(); SceneManager.goto(Scene_Map); };Con:
Scene_Title.prototype.commandNewGame = function() { DataManager.setupNewGame(); this._commandWindow.close(); this.fadeOutAll(); SceneManager.goto(Scene_QUELLOCHEVOLETEVOI); };Sostituite Scene_QUELLOCHEVOLETEVOI con il nome della scena che desiderate far eseguire una volta selezionato il comando.
9. Dopo la riga 333 :
Se al metodo della riga 310 avrete inserito un nuovo comando, toccherà definirne il metodo. Quindi come potete notare
dai metodi commandContinue e commandOptions, lasciate una riga vuota e subito dopo inserite questo codice:////////////////////////////////////////////////////////////////////////////// //// IO AD ESEMPIO HO CREATO IL COMANDO SHUTDOWN OVVERO TERMINA IL GIOCO //// Scene_Title.prototype.commandExitGame = function() { //// this._commandWindow.close(); //// window.close(); //// }; //// //////////////////////////////////////////////////////////////////////////////Ho scoperto che potete far eseguire lo SHUTDOWN attraverso 2 modi. Il primo è quello che ho riportato sopra. Il codice è semplice
ed anche immediato. Però il tutto si chiuderà a mio pare male. Non so spiegarvelo ehm tipo di botto senza nessun Decision.se che
conferma la cosa. Nulla. Schiacci il comando Shutdown e chiudi tutto.
L'altro modo invece è il seguente:
Scene_Title.prototype.commandShutdown = function(){ this._commandWindow.close(); this.fadeOutAll(); //window.close(); SceneManager.exit(); };Quest'ultimo lo reputo migliore. Si presenta bene. Comunque io ve li posto tutti e due così anche voi sarete liberi di scegliere secondo
il vostro gusto.10. All'interno di questa porzione di codice recatevi alla riga 353 :
Scusate se non sono riuscito a completare il post ieri sera.
Ma ho avuto delle controversie (e le ho tutt'ora) per cercare di acquisire il pieno controllo del metodo qui presente:
Scene_Title.prototype.playTitleMusic = function() { AudioManager.playBgm($dataSystem.titleBgm); AudioManager.stopBgs(); AudioManager.stopMe(); };Che tanto innocuo e tanto onesto...pare! Ma non lo è affatto!
Però sono riuscito a conquistare il controllo sulla possibilità di impostare il volume, aggiungendo questa linea di codice appena sotto playBgm .Scene_Title.prototype.playTitleMusic = function() { AudioManager.playBgm($dataSystem.titleBgm); AudioManager.bgmVolume = 100 //di cui 0 = muto && 100 = Volume Massimo AudioManager.stopBgs(); AudioManager.stopMe(); };Ho potuto appurare che è difficilissimo poter modificare le impostazioni di default per scegliere un bgm direttamente dallo
script. Sembrerebbe che non esista il metodo. O forse sono troppo tonto per capirlo. Comunque (deluso) momentaneamente
stoppo qui con la questione suoni di gioco. Anzi se ci sta qualcuno che ne sa qualcosa, please nei commenti.
11. Nel caso in cui aveste inserito un nuovo comando. Pertanto avrete modificato il metodo della riga 310 e dopo la riga 333.
Recatevi questa volta all'interno di rpg_window.js e lì dentro cercate dalla riga 5705 alla 5760
Sarete all'interno di Window_TitleCommand ovvero la finestra che ospita Scene_Title.Dentro questa porzione di codice, recatevi alla riga 5739
e sostituite questo metodo:
Window_TitleCommand.prototype.makeCommandList = function() { this.addCommand(TextManager.newGame, 'newGame'); this.addCommand(TextManager.continue_, 'continue', this.isContinueEnabled()); this.addCommand(TextManager.options, 'options'); };Con quest'altro:
Window_TitleCommand.prototype.makeCommandList = function () { var parameters = PluginManager.parameters('rpg_scenes'); var shutdown_name = parameters['Name'] || "Shutdown" ; this.addCommand ( TextManager.newGame , 'newGame' ); this.addCommand ( TextManager.continue_ , 'continue' , this.isContinueEnabled ()); this.addCommand ( TextManager.options , 'options' ); this.addCommand ( shutdown_name , 'shutdown' ); };Rimanendo in questa porzione di codice appena modificata ^^^^ Se volete Modificare il nome dei vostri nuovi comandi, basterà
rinominare questa stringa:var shutdown_name = parameters['Name'] || "NOMEDELCOMANDO" ;
Sostituendo Entro gli apici il NOMEDELCOMANDO secondo l'uso che preferite.
Le altre voci invece verranno tradotte automaticamente dal programma rpg Maker Mv.
12. Rimanendo in rpg_window.js, recatevi adesso alla riga 5734.Se volete modificare la posizione di una qualsiasi finestra presente in gioco.
(io rimanendo a tema, prenderò in esempio Window_TitleCommand)
Sostituite questo metodo:Window_TitleCommand.prototype.updatePlacement = function() { this.x = (Graphics.boxWidth - this.width) / 2; this.y = Graphics.boxHeight - this.height - 96; };Con quest'altro:
Window_TitleCommand.prototype.updatePlacement = function() { this.x = 270; //di default è 270 this.y = 280; //di default è 280 };13.Dimenticavo! Recatevi adesso alla riga 5730:
Se volete modificare la Larghezza di una qualsiasi finestra (es: Window_TitleCommand)
Modificate il valore numerico posto dopo il return, presente in questo metodo:Window_TitleCommand.prototype.windowWidth = function() { return 240; // di default è 240 };Se volete modificare l'altezza di una finestra: dopo linea 5732, lasciate un rigo vuoto e subito dopo inseritegli quest'altro metodo:
Window_TitleCommand.prototype.windowHeight = function() { return 180; // di default è 180; };
Per adesso, ma solo per adesso, questo è tutto. Spero che io riesca a scoprire altri metodi da mostrare. Comunque in caso di nuovi aggiornamenti posterò sempre qui. Bella gente e alla prossima
-
Bella gente Benvenuti in un nuovo tutorial dedicato al Javascript in ambiente Rpg Maker Mv.
Nel tutorial precedente: 09T :http://www.rpg2s.net/forum/index.php/topic/20364-09-tutorial-gli-operatori/ .
Ho iniziato ad introdurre il concetto sugli Operatori. Essi sono dei simboli che corrispondono a delle operazioni specifiche.
Sono essenziali e servono unicamente a far svolgere tutti quei processi che indurranno il plugin a svolgere determinate azioni.
Li abbiamo incontrati in:
00SaltaTitle
//====================================================== /*: * @plugindesc * Permette di saltare lo Scene_Title * @author * Lomax_Iced * //Parametri----------- * @param Menu Iniziale? * @desc Questo comando consente di attivare * la possibilità di accedere al menu iniziale. * @default Si * //--------------------------------------------------- * @help * Entra nella finestra Parametro e cambia il suo valore. * Si. Permetti al giocatore di tornare al Menu Iniziale. * No. Permetti al giocatore di tornare in Mappa. * Ricominciando una nuova partita. */ //======================================================= var parameters = PluginManager.parameters('00SaltaTitle'); var vaialmenu = String(parameters['Menu Iniziale?'] || 'Si'); Scene_Boot.prototype.start = function() { Scene_Base.prototype.start.call(this); SoundManager.preloadImportantSounds(); if (DataManager.isBattleTest()) { DataManager.setupBattleTest(); SceneManager.goto(Scene_Battle); } else if (DataManager.isEventTest()) { DataManager.setupEventTest(); SceneManager.goto(Scene_Map); } else { this.checkPlayerLocation(); DataManager.setupNewGame(); SceneManager.goto(Scene_Test); } this.updateDocumentTitle(); }; Scene_GameEnd.prototype.commandToTitle = function() { this.fadeOutAll(); if(vaialmenu == 'Si') { SceneManager.goto(Scene_Title); } else { DataManager.setupNewGame(); SceneManager.goto(Scene_Map); } };
In
01Calcolatrice
//====================================================== /*: * @plugindesc * Permette di far apparire un BoxMessaggi * @author * Lomax_Iced * * @help * */ //======================================================= var aliasRisultato = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { aliasRisultato.call(this, command, args); if (command == 'Risultato' ) { var PrimoNumero = 6 var SecondoNumero = PrimoNumero >= 6 $gameMessage.add(String(SecondoNumero)) } };
Ovviamente sono presenti in qualsiasi altro script o plugin esistente al mondo!
Ripeto sono fondamentali.
Nel tutorial numero nove, ho spiegato abbondantemente, in linea generica come si possono richiamare.
Li ho suddivisi per categoria. Adesso, in questo decimo capitolo, proverò ad analizzarli per categoria.
Quindi fatta la premessa..
Iniziamo
:
. . .
Gli OPERATORI MATEMATICI:sono cinque e corrispondono alle comuni operazioni che siamo soliti imparare a scuola.
Sono questi qui:
+ // addizione - // sottrazione * //moltiplicazione / // divisione % // resto
Determinano il risultato dell'espressione a cui essi fanno parte. Ad esempio se io prendessi in considerazione i numeri 4 e 5 in questo modo esprimerei soltanto di possedere due elementi denominati 4 e 5, aldilà del fatto che sono unità numeriche.
Per porre in relazione questi due elementi, occorrono gli operatori (in questo caso tratteremo solo i Matematici).
Ci tengo a precisare che 4 e 5 sono due elementi, aldilà del fatto che sono numeri. Perché dico questo? Perché due elementi lo possono essere pure Pane e Pasta. Oppure 5 e giallo.
Oppure più comunemente in Rpg Maker Mv, x e y. Oppure ancora Width e Heigth . Capito dove voglio arrivare?Vi faccio un esempio estrapolato direttamente da rpg_core.js (un altro dei vostri plugin di base)
Andate lì e cercate la riga numero 823 e copia/incollate fino alla riga 849.
Per intenderci, questa porzione di codice:
Bitmap.prototype.drawText = function(text, x, y, maxWidth, lineHeight, align) { // Note: Firefox has a bug with textBaseline: Bug 737852 // So we use 'alphabetic' here. if (text !== undefined) { var tx = x; var ty = y + lineHeight - (lineHeight - this.fontSize * 0.7) / 2; var context = this._context; var alpha = context.globalAlpha; maxWidth = maxWidth || 0xffffffff; if (align === 'center') { tx += maxWidth / 2; } if (align === 'right') { tx += maxWidth; } context.save(); context.font = this._makeFontNameText(); context.textAlign = align; context.textBaseline = 'alphabetic'; context.globalAlpha = 1; this._drawTextOutline(text, tx, ty, maxWidth); context.globalAlpha = alpha; this._drawTextBody(text, tx, ty, maxWidth); context.restore(); this._setDirty(); } };Ora già dovreste essere in grado di tradurre il codice direttamente dalle stringhe. In sommatoria abbiamo che si è creato l'oggetto drawText figlio dell'oggetto Bitmap. Quello che a noi interessa è iniziare a saper decifrare le operazioni che avvengono in PANCIA.
Isoliamo ancora di più la parte interessata:
if (text !== undefined) { var tx = x; var ty = y + lineHeight - (lineHeight - this.fontSize * 0.7) / 2; var context = this._context; var alpha = context.globalAlpha; maxWidth = maxWidth || 0xffffffff; if (align === 'center') { tx += maxWidth / 2; } if (align === 'right') { tx += maxWidth; } context.save(); context.font = this._makeFontNameText(); context.textAlign = align; context.textBaseline = 'alphabetic'; context.globalAlpha = 1; this._drawTextOutline(text, tx, ty, maxWidth); context.globalAlpha = alpha; this._drawTextBody(text, tx, ty, maxWidth); context.restore(); this._setDirty(); }Sappiamo tutti che questa è una condizione. Il costrutto per richiamarla è if che in italiano vuol dire Se.
Ricordate l'esempio? Se io ho 18 anni, posso guidare la macchina. In questo caso:
Se è stato già definito il testo del messaggio....tx è uguale a x
ty è uguale al risultato di questo calcolo qua: y + lineHeight - (lineHeight - this.fontSize * 0.7) / 2; .
ecc ecc Per ora fermiamoci qui, senza andare molto oltre.
Quindi:
Qui abbiamo.. y + lineHeight - (lineHeight - this.fontSize * 0.7) / 2;
Che è un po come dire:10 + 5 - (5 - 4 *0.7) / 2 =
Come vedete abbiamo generato un'espressione. Il suo risultato finale poi sarà eguagliato a ty .
Quindi tornando al concetto principale:
Qui avremo:
1. Un'addizione, ovvero y + lineHeight che è come dire 10 + 5
2. Diverse sottrazioni, tipo lineHeight - (thi.fontSize * 0.7)/2 ovvero 5 - 4
3. Una moltiplicazione come this.fontSize * 0.7 tipo 3 * 64. Una divisione y + lineHeight - (lineHeight - this.fontSize * 0.7) / 2; oppure 25 / 5
(anche se non è presente nell'esempio, questo operatore % restituisce il resto dell'operazione.
Ora solo per farvelo vedere all'opera, io l'ho trovato cercando in rpg_core.js già alla riga 35.
Ovvero qui:Number.prototype.mod = function(n) { return ((this % n) + n) % n; };Non addentriamoci oltre momentaneamente.
Adesso divertitevi a sperimentare, emulando qualche operazione di base e poi stravolgetela, utilizzando la nostra 01calcolatrice.js
magari per visualizzarne i risultati sulla mappa di gioco .Ora dedichiamoci alla seconda categoria di Operatori, ovvero:
GLI OPERATORI ARITMETICI:GLI OPERATORI ARITMETICI: - // negazione es: var x = -2 ++ // incremento es: var z = ++5 -- // decremento es: var w = --z
Sappiamo tutti che c'è distinzione fra un numero positivo 19 oppure +19 o x oppure +x
E un numero negativo -19 oppure -x
Dire -x + (-9) = 0 e dire x + (-9) = 0
Ovviamente non sono la stessa cosa. nel primo caso l'incognita x assumerà un valore negativo. Nel secondo caso, no.
Quest'altri altri due operatori ++ e -- si occupano invece di gestire la fluttuazione del tasso del parametro.Facendo incrementare o decrementare il valore secondo la specifica impostata dal programmatore.
Li potete riconoscere perché possono precedere o no il valore a cui essi fanno riferimento. Di fatti c'è distinzione fra questa espressione: x = ++1 e quest'altra x = 1++ oppure fra questa x = --1 e questa'altra ancora x = 1-- .
Aldilà del fatto che si può facilmente intuire che l'operatore ++ indica un incremento del suo valore (in questo caso di 1).
Mentre -- indica un decremento . Un altro fattore importante da tenere in considerazione è soprattutto la differenza di posizionamento dell'operatore. In quanto possiamo trovarlo che precede il suo specifico oppure lo segue.
La differenza sta perché cambia anche il suo significato:
1. Se l'operatore precede il proprio valore, il tasso viene modificato Prima che l'espressione venga eseguita.Ovvero avremo oggetti tassati in questo modo x = ++1 oppure y = --1
2. Se l'operatore segue il proprio valore, il tasso viene modificato Dopo che l'espressione verrà eseguita.
Ovvero avremo oggetti tassati in questo modo x = 1++ oppure y = 1--
Spero che vi sia tutto chiaro fino a qua.Adesso finalmente analizzeremo..
gli OPERATORI RELAZIONALI:
|||||||||||||||||||||||||TUTORIAL NON ANCORA CONCLUSO|||||||||||||||||||||||||||
|||||||||||||||||||||||||||||||TUTORIAL DA COMPLETARE||||||||||||||||||||||||||||||||||||
Che sono i seguenti:> // Maggiore >= // Maggiore uguale < // Minore <= // Minore uguale == // uguale != // diverso === // Identico !== // Differente
-
Bella gente ! Rieccomi con un nuovo tutorial. :smile:
Quest'oggi voglio condividere con voi tutto ciò che riguardano le operazioni logiche quali addizioni di due o più elementi.
oppure numeri calcoli e roba bella dai. Soprattutto utile quando andrete a creare un vostro battlesystem fighissimo!
Comunque fatta la premessa...
Iniziamo!
1. Aprite ST22. Create un nuovo plugin e nominatelo..tipo 01calcolatrice
3. Prendete il nostro vecchio plugin. 00SaltaTitle, e tagliate queste porzioni di codice:
TESTA:
//====================================================== /*: * @plugindesc * Permette di saltare lo Scene_Title * E di far apparire due Messaggi richiamando 2 eventi * @author * Lomax_Iced * //Parametri----------- * @param Menu Iniziale? * @desc Questo comando consente di attivare * la possibilità di accedere al menu iniziale. * @default Si * //--------------------------------------------------- * @help * Entra nella finestra Parametro e cambia il suo valore. * Si. Permetti al giocatore di tornare al Menu Iniziale. * No. Permetti al giocatore di tornare in Mappa. * Ricominciando una nuova partita. */ //=======================================================
CUORE:
var aliasMessaggio1 = Game_Interpreter.prototype.ComandiPlugin;
PANCIA:
Game_Interpreter.prototype.ComandiPlugin = function(comando, parole) { aliasMessaggio1.call(this, comando, parole); if (comando == 'Messaggio1' ) { $gameMessage.add('Avvio Messaggio1') } };Ovviamente voi avrete tutto in sequenza, in un unico script. Dunque Cosa abbiamo fatto? Abbiamo separato questa funzione che sinceramente non riguarda più 00SaltaTitle. Però creiamo un nuovo script che implementa queste nostre nuove funzioni che fra poco
vi illustrerò.
Quindi in sostanza avremo, 01Calcolatrice:
e più o meno lo script modificato così..//====================================================== /*: * @plugindesc * Permette di far apparire un BoxMessaggi * @author * Lomax_Iced * * @help * */ //======================================================= var aliasMessaggio1 = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { aliasMessaggio1.call(this, command, args); if (command == 'Messaggio1' ) { $gameMessage.add('Avvio Messaggio1') } };Vi ricordo che stiamo cercando di creare una specie di calcolatrice, quindi adattiamo il nostro oggetto 'Messaggio1', modificandone i parametri. Pertanto avremo per esempio che non si chiamerà più Messaggio1, ma lo nominiamo tipo.... Risultato !
Perché così?
Perché quello che noi vorremmo che si visualizzasse in game siano i risultati delle operazioni che andremo a svolgere dentro la PANCIA del nostro plugin. Quindi premesso questo iniziamo a modificare la struttura dell'oggetto:
1. per prima cosa rinominiamo l'asias........ da aliasMessaggio1 diverrà aliasRisultato.
Vorrei aprire una riflessione su questo costrutto alias:
Ricordate (per i nostalgici dell'rgss1/2/3) che alias veniva usato quando si doveva richiamare un metodo che aveva un nome proprio.
tipo, c'era il metodo standard:
def update #info end
Ma c'era anche il metodo più specifico, tipo:
alias Lomax.update def lomax_update #info end
Mi pare fosse così.
In Javascript come notate l'alias viene usato per gli oggetti. Questo fa valere ancora di più la tesi che i metodi in questo tipo di linguaggio sono incorporati dentro gli oggetti. Pertanto l'alias viene utilizzato per nominare un oggetto figlio che assume le proprietà dell'oggetto padre a cui esso fa riferimento.
2. Finalmente dentro la PANCIA modificheremo il .call, ovvero il secondo alias, nominando anch'esso aliasRisultato.
3. All'interno della nostra condizione, rinominiamo il comando che attuerà il processo. Anche qui rinominandolo 'Risultato'
4.Modificate questa stringa:$gameMessage.add('Avvio Messaggio1');in questo modo:
$gameMessage.add(String());
E lasciate momentaneamente tutto per com'è.
Ora, dovreste avere più o meno questa compilazione:
//====================================================== /*: * @plugindesc * Permette di far apparire un BoxMessaggi * @author * Lomax_Iced * * @help * */ //======================================================= var aliasRisultato = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { aliasRisultato.call(this, command, args); if (command == 'Risultato' ) { $gameMessage.add(String()); } };Quanto avrete ottenuto fin ora sarà il nostro nuovo Plugin che terremo in esame. Ovvero la piattaforma in cui svolgeremo le nostre Operazioni.
. . .
Eh..picciò! svolgiamone qualcuna dai
:smile:
Dunque:
In tanto si è detto che qualsiasi nostra operazione logica verrà svolta in PANCIA. pertanto, entriamo nella nostra if (condizione)
più precisamente entro le parentesi graffe e appena sopra questa stringa: $gameMessage.add(String())
inseriamo queste due dichiarazioni:
var PrimoNumero = 6;
var SecondoNumero = PrimoNumero + 6;
Avremo ottenuto questo:
if (command == 'Risultato' ) { var PrimoNumero = 6 var SecondoNumero = PrimoNumero + 6 $gameMessage.add(String()) }Adesso dentro la dichiarazione $gameMessage.add(String()) inserite questa informazione:
$gameMessage.add(String(SecondoNumero))
Salvate e andate a verificare cosa avete prodotto all'interno del vostro progetto Rpg Maker Mv.
Ricordatevi però che prima dovrete:
1. Andare in Rpg Maker Mv
2. Attivare il nuovo Plugin (in gestione Plugin).
3. Entrare dentro l'evento che avevate creato precedentemente e modificate il comando Plugin:
sostituendo 'Messaggio1' con Risultato.
4. Salvate il tutto e avviate il tester.
E come vedete, vi apparirà il risultato!
Vi faccio vedere una cosa (un erroruccio) che io ho fatto inizialmente, perché vi spiego, come Kid di Soul Eater sono amante della simmetria e avevo trascritto tutto in questo modo:
FORMA SBAGLIATA:
if (command == 'Risultato' ) { var PrimoNumero = 6 var SecondoNumero = PrimoNumero + 6 $gameMessage.add(String(SecondoNumero)) }Notate gli 'uguale' dentro le dichiarazioni var? Sono tutti belli allineati. Benissimo, non fatelo. :sleep:
Perché in questo modo si visualizzerà la finestra ma senza alcun dato. (senza contenuto intendo)
Invece la forma CORRETTA sarà la seguente:
var aliasRisultato = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { aliasRisultato.call(this, command, args); if (command == 'Risultato' ) { var PrimoNumero = 6 var SecondoNumero = PrimoNumero + 6 $gameMessage.add(String(SecondoNumero)) } };Sbizzarritevi, divertitevi, vi ho aperto un mondo. Fate tutte le operazioni che volete. Io per ora stoppo qui.. E noi ci rileggiamo dopo
Al prossimo tutorial! :smile:
GLI OPERATORI A DISPOSIZIONE SONO I SEGUENTI:
OPERATORI MATEMATICI: + // addizione es: 1 + x - // sottrazione es: x - 1 * //moltiplicazione es: 5 * x / // divisione es: 8 / y % // resto es: 7 % 2
OPERATORI ARITMETICI: - // negazione es: var x = -2 ++ // incremento es: var z = ++5 -- // decremento es: var w = --z
OPERATORI RELAZIONALI: > // Maggiore es: 5 > 3 >= // Maggiore uguale es: x >= 3 < // Minore es: 3 < 5 <= // Minore uguale es: y <= 5 == // uguale es: 10 == 5 + 5 != // diverso es: 8 != x === // Identico es: 10 === 10 !== // Differente es: 66 !== 99
OPERATORI LOGICI: && // and es: x = (x >= 3) && (x <= 2) || // or es: x = 4 || (2 + 2) ! // not es: !2==2
Poi ce ne sarebbero altri di più complessi.
Ma preferisco approfondire tutto nel prossimo tutorial. Ciaoo :smile:
-
Bella gente eccomi con un nuovo tutorial dedicato al Javascript utilizzato in ambiente Rpg Maker Mv
((qualcuno di voi avrà detto, ma questo non era il settimo! come mai ora è L'ottavo??? :O )
Niente gente per esigenza ho scoperto che era meglio spiegare prima il concetto di funzione, poi di oggetto e infine di Metodo.
Quindi adesso questo è divenuto appunto il tutorial numero otto.)
Nei tutorial precedenti vi ho fatto l'esempio di come creare un metodo e assegnare in esso delle proprietà o funzioni da far eseguire all'eseguibile il tutto appunto. Nel newSettimo vi ho spiegato l'importanza delle funzioni, delle Tipolgie di Oggetto (I Padri) e di come si creano gli oggetti Figli.
Per chi non sa di cosa io stia parlando, vi invito a leggere i tutorial precedenti che troverete in questo link già listati:
http://www.rpg2s.net/forum/index.php/forum/124-plugin-e-javascript/
Però ci tengo che andiate in particolar modo a visionare il tutorial numero 06 e il tutorial numero 07 perché introduco, con degli esempi, tutto l'argomento.Vi esorto sin da subito a prestare moltissima attenzione a quanto si dirà fra poco.
L'argomento riguardante i Metodi javascript è molto complesso però vi assicuro che una volta che lo abbiate capito, vi si aprirà un mondo.
Detto questo facciamoci coraggio e...
Iniziamo!
PremessaTeorica:1. Javascript è un linguaggio diverso dal linguaggio Java.Premesso questo:2. Ogni Oggetto che verrà creato in linguaggio Javascript appartiene ad un oggetto padre
denominato Object.Nel caso specifico di Rpg Maker Mv, questo SUPER PADRE a cui fanno riferimento tutti gli altriplugin, è conosciuto come lo script rpg_objects.js .3. Tutti gli oggetti figli di rpg_object.js erediteranno tutti i metodi e tutte le proprietà cheapparterranno ad Object.
E si evocheranno in questo modo:
(vi faccio i tre esempi che già abbiamo incontrato nei tutorial precedenti)vi ricordate?
Scene_Boot.prototype.start = function() { //informazioni varie };
Le informazioni che venivano immesse all'interno del suddetto box, riguardavano unicamente le
funzioni di avvio del gioco. In particolare la gestione delle locazioni in cui veniva spedito il giocatore
una volta attivata la condizione esatta, fra le tante mosse a disposizione del programmatore.
Scene_GameEnd.prototype.commandToTitle = function() { //informazioni varie };
Le informazioni che venivano immesse all'interno del suddetto box, riguardavano unicamente le
funzioni di chiusura del gioco. In particolar modo la possibilità di attivare o disattivare da parte del progettista, la facoltà di poter far visualizzare (si/no) al giocatore il menu iniziale del game, una volta che quest'ultimo avesse deciso di far riavviare una nuova partita.Game_Interpreter.prototype.pluginCommand = function(command, args) { //informazioni varie };
Le informazioni che venivano immesse all'interno del suddetto box, riguardavano unicamente le
funzioni di poter far avviare un messaggio testuale immesso all'interno di una windowskin attivabile in gioco, tramite un call script inserito dentro un evento.
Dette le due regole fondamentali e fatti i tre esempi, passiamo all'analisi e alla composizione delle stringhe che compongono i BoxMetodi.
Prendiamo la fattispecie:
A.Eredita.B = funzioni()
Questa stringa è una sorta di Catena che implica che B (ovvero oggetto2) sia legato tramite un legame ereditario a A (ovvero l'oggetto1) e pertanto questi due elementi possiedono le stesse funzioni.
Quindi detto questo abbiamo ad esempio che:
Game_Interpreter è un oggetto.
Per oggetto si intende un box o una scatola. Infatti basti pensare che lo stesso Game_Interpreter sia uno script con al suo interno altrettanti suoi metodi e funzioni che lo rendono utile, nella sua funzione originaria. Ed è figlio di rpg_Object.js
Quindi si può definire Padre di pluginCommand e condivide parte (se non tutte) delle sue funzioni.
il comando che permette di far avvenire il legame è questo: .prototype.
lo ripeto per far saltare di più all'occhio i due punti: puntoprototypepunto
Studiando gli oggetti nel capitolo 07T ho potuto appurare che non si fa molta distinzione fra Oggetti e Metodi. Cosa voglio dire?
Voglio dire che, dato che tutto si muove in funzione delle funzioni (scusate il gioco di parole).
Quando si crea un oggetto e si assegnano ad esso delle caratteristiche, in un certo qual senso, si è creato un metodo.
Cioè il metodo è incorporato nell'oggetto.
Vi faccio un esempio.
Se io voglio fare apparire in game un messaggio di testo il metodo che mi permette tale operazione è il richiamare tramite un call script dentro un evento, un oggetto che abbia al suo interno le caratteristiche appropriate. Vi faccio l'esempio che ho inserito all'interno del nostro plugin:
Game_Interpreter.prototype.pluginCommand = function(command, args) { aliasPluginCommand.call(this, command, args); if (command == 'DiQualcosa' ) { $gameMessage.add('O.o ehm veramente non saprei..ehm ohm..') } };Se noi andassimo in rpg_object.js e andassimo a visionare dalla stringa numero 8728 fino all'ultima stringa 10452. Potremmo notare che
Game_Interpreter ovvero Oggetto1 e citato plurime volte. Questo sta ad indicare che (in questo caso) è lui l'oggetto padre.
Però ricordiamoci sempre che è posto all'interno di rpg_Object. Quindi oltre ad essere padre, è anche figlio. (non fate battute
)
Quindi tornando al ragionamento, in questo caso, l'oggetto numero due ovvero pluginCommand sarà un altro dei suoi figli.
E continuando a dire Quindi Quindi, noi (per chi non lo avesse ancora capito) Abbiamo richiamato pluginCommand nel nostro script.
Che metodo abbiamo usato?
Bella domanda!
Da un punto di vista analitico posso dire per certo che abbiamo usato un metodo definito constructor che permette di legare a se più oggetti tramite il costrutto prototype cicuito da dei punti.
Però momentaneamente posso condividere con voi la riflessione che a parte questo metodo, generalmente se volessi creare un secondo oggetto che mi svolge che ne so un altro testo in game e lo chiamerò Messaggio1.
Per semplificarci dovrei scrivere così:
var aliasMessaggio1 = pluginCommand; pluginCommand.prototype.Messaggio1 = function(command, args) { aliasMessaggio1.call(this, command, args); if (command == 'Messaggio1') { $gameMessage.add('Avvio Messaggio1') } };E invece no!
Voglio lasciare il codice sopra per indicare gli errori che ho fatto e che si possono fare. Quindi quanto scritto su è Errato!
Tecnicamente la struttura è corretta solo che si fanno i richiami sbagliati.
La scrittura corretta risulterà la seguente, e ho pure modificato il nostro plugin rendendo lo script più professionale.
In sostanza ho aggiunto questi due oggetti:
var aliasMessaggio1 = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { aliasMessaggio1.call(this, command, args); if (command == 'Messaggio1' ) { $gameMessage.add('Avvio Messaggio1') } }; var aliasMessaggio2 = Game_Interpreter.prototype.pluginCommand; Game_Interpreter.prototype.pluginCommand = function(command, args) { aliasMessaggio2.call(this, command, args); if (command == 'Messaggio2') { $gameMessage.add('Avvio Messaggio2') } };Allora dunque, sono due oggetti simili denominati Messaggio1 e Messaggio2 e si occupano entrambi di far visualizzare una windowskin in gioco (ovviamente con dentro un testo).
Attivando i rispettivi PluginCommand (terza pagina, ultima voce in basso a destra dei comandi evento) appunto dentro i 2 Eventi.
In uno ho richiamato il comando 'Messaggio1' e nell'altro il comando 'Messaggio2'. notate le due condizioni (if) che appunto specificano che
se si comanda Messaggio1 o Messaggio2 la reazione sarà che verrà evocata una finestra con dentro i messaggi corrispettivi.
Questa cosa può essere utile per creare dei dialoghi complessi, in maniera del tutto semplice e più immediata.
L'unico metodo che posso dire di avere utilizzato è il constructor . che mi ha permesso di :
Game_Interpreter.prototype.pluginCommand = function(command, args) { aliasMessaggio2.call(this, command, args); if (command == 'Messaggio2') { $gameMessage.add('Avvio Messaggio2') } };1. Game_Interpreter.prototype.pluginCommand = function(command, args)
Mi ha permesso di Richiamare le funzioni appartenenti all'oggetto PluginCommand. Andiamolo a trovare..
Eccolo qua! (riga 10441 fino a 10451 sempre di rpg_object.js ovviamente)
// Plugin Command Game_Interpreter.prototype.command356 = function() { var args = this._params[0].split(" "); var command = args.shift(); this.pluginCommand(command, args); return true; };Game_Interpreter.prototype.pluginCommand = function(command, args) {// to be overridden by plugins};In sostanza Game_Interpreter gestisce tutto ciò che si occupa della programmazione ad eventi.
PluginCommand ovvero tradotto Comandi Plugin (come dicevo prima, ultima voce a destra della terza pagina del menu Contenuti posto dentro le pagine Evento) è catalogato come comando numero 356. In quest'ultima porzione di codice, estrapolata da rpg_object.js viene specificato che
il comando356 appartiene a Game_Interpreter e oltre a costituirne le funzioni, lo si rinomina. tramite quel
this.pluginCommand(command, args);
Specificando appunto che il progettista, lo potrà identificare sotto il nome di pluginCommand.
Ora io per esigenze didattiche ho voluto attuare delle modifiche al comando 356, per vedere un pochettino quali fossero le reazioni.
E devo dire che tramite questo mio esperimento ho potuto appurare che il costrutto this. si occupa di definire le generalità del comando.
vi riporto la modifica attuata:
// Plugin Command Game_Interpreter.prototype.command356 = function() { var args = this._params[0].split(" "); var command = args.shift(); this.ComandiPlugin(command, args); return true; }; Game_Interpreter.prototype.ComandiPlugin = function(command, args) { // to be overridden by plugins };In sostanza ho soltanto rinominato l'oggetto, per vedere se rinominandolo cambiava qualcosa oppure no. E non è cambiato nulla.
Quindi questo mi fa credere che gli oggetti sono singole scatole in cui a loro interno possiedono le loro caratteristiche che al tempo stesso corrispondono ai metodi.
Per metodi intendo 'Diversi modi per far qualcosa'.
Quindi capite bene che il concetto si semplifica di molto. Per un programmatore alle prime armi basterà spulciare gli oggetti presenti all'interno di rpg_object.js, tipo ingredienti presi in un supermarket. Prendere ciò che vi serve, metterlo nel vostro carrello della spesa (il vostro plugin)
e poi una volta a casa (in Sublime text 2 o in altro tool editor) preparare la ricetta.
Io ad esempio da neofita ho fatto così:
(io ho modificato pure il codice inerente pluginCommand italianizzandolo. Perché a me piace. Facendolo diventare così:
// Plugin Command Game_Interpreter.prototype.command356 = function() { var parole = this._params[0].split(" "); var comando = parole.shift(); this.ComandiPlugin(comando, parole); return true; }; Game_Interpreter.prototype.ComandiPlugin = function(comando, parole) { // to be overridden by plugins };Modificando quelle paroline di li, rinomino soltanto il nome delle proprietà che appartengono unicamente al command356.
e poi modifico il nome pluginCommand in ComandiPlugin. Io vi consiglierei di non farlo anche perché nella foga potreste italianizzare tutto anche i costrutti fondamentali e combinate macelli. Io l'ho fatto perché voglio rendervi al corrente cosa potrebbe essere modificabile e cosa no.
Anche perché così mi rendo conto di come funziona tutto sto linguaggio.
Ho trasformato il nostro plugin 00SaltaTitle.js in questo modo:
//====================================================== /*: * @plugindesc * Permette di saltare lo Scene_Title * E di far apparire due BoxMessaggi richiamando 2 eventi * @author * Lomax_Iced * //Parametri----------- * @param Menu Iniziale? * @desc Questo comando consente di attivare * la possibilità di accedere al menu iniziale. * @default Si * //--------------------------------------------------- * @help * Entra nella finestra Parametro e cambia il suo valore. * Si. Permetti al giocatore di tornare al Menu Iniziale. * No. Permetti al giocatore di tornare in Mappa. * Ricominciando una nuova partita. */ //======================================================= var parameters = PluginManager.parameters('00SaltaTitle'); var vaialmenu = String(parameters['Menu Iniziale?'] || 'Si'); Scene_Boot.prototype.start = function() { Scene_Base.prototype.start.call(this); SoundManager.preloadImportantSounds(); if (DataManager.isBattleTest()) { DataManager.setupBattleTest(); SceneManager.goto(Scene_Battle); } else if (DataManager.isEventTest()) { DataManager.setupEventTest(); SceneManager.goto(Scene_Map); } else { this.checkPlayerLocation(); DataManager.setupNewGame(); SceneManager.goto(Scene_Map); } this.updateDocumentTitle(); }; Scene_GameEnd.prototype.commandToTitle = function() { this.fadeOutAll(); if(vaialmenu == 'Si') { SceneManager.goto(Scene_Title); } else { DataManager.setupNewGame(); SceneManager.goto(Scene_Map); } }; var aliasMessaggio1 = Game_Interpreter.prototype.ComandiPlugin; Game_Interpreter.prototype.ComandiPlugin = function(comando, parole) { aliasMessaggio1.call(this, comando, parole); if (comando == 'Messaggio1' ) { $gameMessage.add('Avvio Messaggio1') } }; var aliasMessaggio2 = Game_Interpreter.prototype.ComandiPlugin; Game_Interpreter.prototype.ComandiPlugin = function(comando, parole) { aliasMessaggio2.call(this, comando, parole); if (comando == 'Messaggio2') { $gameMessage.add('Avvio Messaggio2') } };
Spero che la spiegazione vi sia piaciuta e soprattutto che l'abbiate capita. In caso contrario dite pure tutto quello che non vi è chiaro ed io
proverò a renderlo tale.
Detto questo stoppo qui ehm.. ci rileggiamo al prossimo tutorial. -
Ciao gente benvenuti in questo settimo tutorial
Se notate è come se stessi procedendo a ritroso. In effetti è così. :smile:
1. Siamo partiti dal Plugin;2. abbiamo creato uno script copia/incollando porzioni di codice già esistente;
3. lo abbiamo modificato secondo le nostre esigenze;4. siamo passati all'analisi strutturale del corpo dello script/plugin e tramite questo metodo di studio, ci
siamo addentrati nel conoscere alcuni dei costrutti chiave che compongono i processi delle porzioni
di codice che abbiamo preso in esame;5. Abbiamo analizzato lo stile di compilazione;
Adesso, avendo ottenuto le giuste nozioni, che ci hanno permesso di farci coinvolgere.
Possiamo permetterci di studiare tutti questi argomenti da un punto di vista più didattico.E quindi volendo sminuzzare ancora di più il tutto, mi presterò ad esporvi il concetto di Oggetto,
in javascript.
(Non posso farvi addentrare nella Giungla dei Metodi senza avervi dato gli oggetti per sopravvivere all'interno di essa).
Quindi fatta la premessa..
Iniziamo!Uno Oggetto in javascript lo si inizia ad idealizzare in questo modo:
function Airship(numPilot) { this.velocita = 0; this.numPiloti += numPilot; if(numPiloti > 0) { this.numPiloti = numPilot } } var ragnarock = new Airship(6);Dunque analizzando bene la porzione di codice, noteremo che l'elemento fondamentale che sta in testa a tutto,
è il costrutto function seguito dal Nome dell'oggetto che andremo a creare.
Perché in Javascript, prima di idealizzare un Oggetto, si deve determinare assolutamente la sua funzione.
In Javascript sono le funzioni che assumono importanza costruttrice,
basti pensare che è proprio la Funzione Constructor che gestisce tutto ciò che riguarda la creazione degli oggetti.
In questo caso entro le tonde abbiamo inserito il numero di piloti che inseguito popoleranno tutti i secondi oggetti figli ad Airship.
Ma lo vedremo a breve.
Dopo di che passiamo notare le graffe dove già sapete che racchiudono le informazioni proprie di quell'oggetto.
Sapete cos'è var ovvero un richiamo che in questo caso ci spiega che l'oggetto ragnarock è un nuovo modello di Airship.
O meglio che Ragnarock è un oggetto figlio di Airship. E quindi essendo tale, in lui vi si possono associare le stesse proprietà
presenti nel suo oggetto Padre. Quel 6 tra parentesi tonde è il numPilot ovvero il numero di piloti che (in questo caso) la ragnarock
può ospitare.
La novità invece è il costrutto this. seguito dal nome della proprietà che appartiene all'oggetto
(in questo caso Airship).
Per i nostalgici..
function : javascript = class : rgss1/2/3
Nel vecchio linguaggio RpgMaker avevamo le classi, alias, i metodi..
In javascript tutto questo viene racchiuso all'interno dei singoli oggetti.
Usciamo dallo spoiler.Compreso questo concetto, possiamo finalmente adottare questa nuova filosofia, ovvero che se vogliamo creare un nuovo oggetto avente delle proprietà magari identiche a degli oggetti già esistenti. Basterà semplicemente richiamare quel secondo oggetto già esistente, avente quelle stesse proprietà e quindi (come andremo a vedere nel tutorial successivo) lo si potrà legare tramite una catena ereditaria, agli oggetti che andremo a creare.
Quindi volendo schematizzare il tutto:
In Javascript:
1. Prima crei una Specie, ovvero una categoria (il concetto di insieme).
Che poi sarebbe l'Oggetto Padre con le proprietà in esso ammesse.2. Poi crei gli oggetti appartenenti a quella specie, o categoria, o insieme che sono comunque soggetti a quelle proprietà lì.
Volete un esempio? Tipo...
Scene_GameEnd.prototype.commandToTitle = function() { //informazioni varie };Scene_GameEnd è l'oggetto1 che verrà concatenato all'oggetto2 il quale avranno le stesse funzioni.
Nello 08T spiegherò tutto quello che ci sarà da sapere.
. . .
Adesso, ritornando all'esempio dell'Airship e di Ragnarock,
il quadro della situazione risulterà il seguente:
1. Abbiamo creato un oggetto Airship.
Che altro non è che una Categoria, avente due proprietà (velocità = 0) e numero di piloti indefinito.
2. Poi abbiamo creato un secondo oggetto Ragnarock e gli abbiamo conferito le stesse proprietà di Airship.
Però modificandone i valori, ovvero il numero di piloti. Abbiamo preferito che ospitasse un numero di 6 piloti.
Per fare avvenire quanto detto nel punto due, bisognerà semplicemente compilare questa stringa:
var ragnarock = new Airship(6);
In questo modo abbiamo creato un secondo oggetto e avremo conferito in lui un numero di piloti pari a 6.
Mi spiego meglio:
Creato Airship avente passeggeri indefiniti. Adesso abbiamo creato Ragnarock avente 6 passeggeri.
Se volessimo creare un terzo oggetto, secondo figlio di Airship. Basterà compilare il tutto, in questo modo:
var strahl = new Airship(8); Strahl.velocita = 2;
Adesso sappiamo che la Strahl è un Airship avente velocità 2 e numero di passeggeri pari a 8.
Ragnarock e Strahl sono due oggetti Figli di Airship.
Spero che io sia stato chiaro nella spiegazione. Ripeto sto studiando insieme a voi questo linguaggio, che per me è nuovo.
Avevo appena imparato l'Rgss ma con l'arrivo di RpgMv ho preso la decisione di cambiare tool per lanciare il mio game.
Anche perché Rpgxp non possiede quelle caratteristiche utili per lanciare il mio progetto in ambiente mobile. L'Rpgmv invece si
perché appunto li ha di base.
Quindi quanto spiegato sino ad ora, è frutto dei miei studi inerenti l'argomento. Spero di essere sulla strada giusta e di non stare dicendo delle castronerie. Nel caso in cui lo stessi facendo vi prego di farmelo sapere. Ad ogni modo, stoppo qui per adesso e vi rimando al prossimo tutoria in cui finalmente si parlerà di metodi, si entrerà nel dettaglio, così da poter approfondire meglio questo concetto e poter essere in grado di leggere meglio gli script(o plugin) che avremo presenti nel nostro editor, in particolar modo, quello che abbiamo creato noi durante questa serie di tutorial.
A me interessa che riuscite a decifrare il linguaggio, capire le regole e saper distinguere le funzioni che coordinano le tipologie di oggetto e i suoi annessi figli. Poi le operazioni logiche oppure le condizioni bene o male abbiamo già un infarinatura generale.
In sostanza, questi aspetti li tratteremo pure, ma prima ho esigenza che si comprenda lo stile di compilazione adottato dal linguaggio Javascript.
Detto questo teletrasportiamoci al prossimo Tutorial!

Cosa manca ad Rpg2S?
in Problemi tecnici
Posted
Si ok. Però io ho commentato un post che per titolo fa: 'Cosa manca a Rpg2s?'
Io non voglio che sto posto diventa Facebook, che sia chiaro.
Se devo dirla tutta, graficamente parlando, mi piaceva di più quando era così.
http://i68.tinypic.com/2a94bdj.jpg
Vi ricordate? :)
Semplice e accogliente. Però ovviamente mica posso dire al gestore di un circolo che frequento cambia il colore delle pareti che a me piace il fucsia. Quello mi risponde picche. Però se mi dovesse chiedere: 'Ma cosa ne pensi del colore delle pareti?' io allora gli dico
Meglio fucsia! xD (è un esempio, non ricordo nemmeno che tinta sia il fucsia).
Questo per dire che se esiste un post che permette a noi utenti comuni di poter commentare, esprimendo quello che per noi manca al sito e al forum. Non si dovrebbe poi uno infastidire se di anno e in anno ci sta un giro di utenza che di volta in volta dice che manca questo o quello. No?!
E manco si può pretendere che l'utente qualunque sappia che magari qualcun'altro prima di lui abbia espresso lo stesso concetto e ci sia stata una risposta passata in cui si esprimeva picche oppure cuori. Non lo può mai sapere e nemmeno gli si può chiedere di andarsi a rileggere 37 pagine di commenti per andare a vedere se un tizio ics l'ha già detto. Cioè è lecito farlo, ma solo se vuole lui.
Se uno segue un topic del genere lo fa e risponde in maniera immediata. Io per esempio se vedevo che era una discussione vecchia, non avrei mai riportato a galla la cosa, a meno ché non ho novità che potrebbero servire alla community.
. . .
Invece per quanto riguarda il discorso su 'Quotare' qualcosa è diverso da mettere un 'Like'.
Perché per quotare qualcosa, bisogna citare il commento di qualcuno e scrivere letteralmente una risposta sotto, quindi lo trovo inutile, tanto vale commentare.
Invece mettere un 'Like' è informare che si sta seguendo la discussione; si stanno apprezzando determinati commenti; che momentaneamente non si ha modo di rispondere, vuoi per un motivo o per un altro, perché non si ha voglia o perché non si può per cause esterne ma comunque si sta seguendo la tematica.
Quindi mettere un like non è sinonimo di essere disfattisti. Perché chi è tale manco se la segue la discussione.
Poi aldilà di questo, se strutturalmente parlando è complesso implementare questa funzione per questioni di rallentamento o altra roba, va bene così, va bene lo stesso. Cioè non vogliateci male se esprimiamo un parere.
Non era mia intenzione infastidire ne te Dax, ne nessun altro.