Queste righe di comando rappresentano un po' il "fulcro" del battle system ad eventi sul quale ho cominciato a lavorare da circa due mesi (tre mesi e mezzo fa presi in mano il tool per la prima volta in vita mia e da allora mi misi sotto per imparare ad eventare), ho pensato di condividerle per mettere a disposizione di chi fosse interessato o per chi volesse trovarvi una qualche forma di ispirazione, suggerimento per approciare il problema delle collisioni fra giocatore ed nemici su mappa...
questo è lo screen (ho dovuto fare un copia incolla veloce, quindi scusate se non viene perfetto..) di seguito darò una concisa spiegazione dei contenuti:
Ok, prima cosa, parlo soprattutto a chi potrebbe essere come me due mesi fa, guardando queste righe trovarsi spiazzato e confuso, tranquilli, è normalissimo! è solo questione di farci l'abitudine pian piano e poi il codice lo vedrete sotto un altra prospettiva molto più semplice dell'apparenza.
Si comincia impostando 4 variabili che contengono rispettivamente le coordinate XY dell'eroe su schermo (NON su mappa, ora vi spiego perchè...) e poi le coordinate XY sempre su schermo di un altro evento (nemico o quel che sia, di cui volete gestire la collisione).
Impostate le variabili si fa fare una semplice differenza tra le x e le y del nemico e quelle del nostro eroe in modo da "risalire" alla distanza in pixel fra gli stessi.
QUI occorre fare una doverosa puntualizzazione sul tipo di coordinate, quelle su mappa si riferiscono ai tiles del grid, quindi ad esempio il primo tile in alto a sinistra avrà coordinate 0,0 (in quanto partono da zero) il secondo tile a destra del primo ma sulla stessa X avrà coordinate 1,0 , quello immediatamente sotto avrà coordinate 1,1 e così via..
tali coordinate essendo riferite ai tiles hanno solo numeri interi, il "problema" dell'utilizzare le coordinate su mappa per la gestione delle collisioni è dovuto al fatto che il Tool calcola il variare di tali coordinate in "anticipo", ad esempio un evento in movimento che passa da un tile ad un altro, per il tool cambia coordinate nel momento stesso in cui fa per dirigersi nella casella accanto (immaginate una sorta di trigger contatto evento..) questo porta a far si che se noi utilizziamo tali coordinate per la gestione di una collisione, potremo avere la collisione quando ancora un evento sembra a un tile di distanza da noi (quindi molto brutto e strano da vedersi), per ovviare a questo problema usiamo le coordinate su schermo, perchè queste sono invece basate sui pixel contati partendo da un ipotetico centro del tile (a noi poco interessa perchè basando il ragionamento sulla distanza in tiles, ovunque siano eroe e nemici, la matematica non essendo un opinione, avremo sempre una differenza CERTA e sicura su cui improntare le nostre condizioni nel codice...). Un altra cosa ancora, se per caso decidete di usare un qualche script per il pixel movement, avere le coordinate su schermo vi faciliterà enormenmetnte la vita, e non solo, vi permetterà di poter "dosare" addirittura i pixel per fare una certa cosa in modo certosino, ad esempio se sono accanto e quindi a distanza di 32pixel (nè uno di più nè uno di meno) potrete usare un arma come un pugnale, se siete a distanza superiore a 32(non uguale altrimenti usa il pugnale) e inferiore a 50 potete usare la spada, se siete a una distanza superiore a50 (non uguale altrimenti usa la spada) e inferiore a 200 usa la magia eccetera eccetera...
OK, ora che abbiamo compreso perchè le coordinate su schermo han da essere preferite a quelle su mappa proseguiamo a disaminare la logica del discorso, il cui funzionamento in parte ho appena riassunto ^^
cominciamo infatti con le nostre condizioni che vanno divise in due principali scaglioni, quello che succede quando giocatore e nemico sono sulla stessa ascissa (cioè hanno la stessa X, cioè Xnemico-Xgiocatore è pari a 0, cioè in pratica il giocatore e il nemico stanno uno sopra e l'altro sotto o viceversa comunque sulla stessa colonna..) a quel punto calcoliamo la distanza che hanno, se la distanza rientra in un certo range facciamo attivare determinati switch che ci abiliteranno a fare determinate cose, altrimenti mettiamo tali switch in OFF (importante non dimenticarsi mai di fare questo, diversamente uno switch rimarrebbe su ON anche se voi vi allontanate per esempio dalle condizioni di distanza di collisione)
si ripete quindi lo stesso discorso per quello che succede quando il nemico e giocatore sono sulla stessa ordinata (cioè hanno la stessa Y, cioè Xnemico-Xgiocatore è pari a 0, cioè in pratica giocatore e nemico stanno uno a destra dell'altro e/o viceversa comunque sulla stessa riga...) a quel punto di nuovo impostiamo le nostre condizioni, se sono sulla stessa riga cioè Y=0 dobbiamo solo impostare quando la distanza sulla X è "tot" e a quel punto attivare le switch (o fare qualunque cosa vogliamo) oppure metterla su OFF.
Se siete alle prime armi e volete cimentarvi in un qualcosa del genere vi suggerisco di cominciare con qualcosa di più semplice (quello che vedete che ho fatto io calcola ben 3 switches.. una distanza di 3 tiles per l'attacco magico, una di "63pixel" per l'attacco fisico dell'eroe (DIMENTICAVO, SE METTETE 32 LA CONDIZIONE AVVIENE QUANDO SONO EFFETTIVI I 32, il che si verifica esclusivamente QUANDO IL GIOCATORE NEMICO STANNO ESATTAMENTE UNO AFFIANCO ALL'ALTRO, PER AVERE UN MARGINE DI MOVIMENTO CONSIGLIO DI USARE QUESTO VALORE "LIMITE" di 63, se infatti mettete 64 passate automaticamente ad un tile in più (e quindi succede che avrete una "collisione" ad un tile intiero di distanza!!! ma con 63 parte la collisione dal momento in cui fate per varcare il tile, quindi è praticamente un piccolo anticipo sulla mossa ) ed un ultima di 32 SECCO per l'attacco del nemico..
Naturalmente ognuno è libero di variare modificare in base alle proprie esigenze! quello che ho eventato io qui sopra non ha la pretesa di fare da imperativo per nessuno e in nessun caso, ma solo un modo come un altro di sbrogliare la faccenda "collisioni"..
Notare anche che io ho messo la subcondition giocatore rivolto su, giù, destra e sinistra, in modo che lo switch che mi abilita l'attacco dell'eroe sia vincolato al fatto che l'eroe sia girato/rivolto esclusivamente verso l'evento/nemico in questione e non altrove (altrimenti potreste avere le condizioni favorevoli alla collisione anche standogli attaccato ma di spalle e non sarebbe verosimile danneggiare un nemico che ti sta dietro, menando un fendente davanti )