Login with a social network:

Sviluppo multipiattaforma

Area dedicata a tutti gli sviluppatori in erba.

Re: Sviluppo multipiattaforma

Messaggioda AprilSkies il giovedì 30 maggio 2013, 15:25

Passiamo alla domanda 2
(anche se nel frattempo propongo una cosa: perchè non contatti un moderatore e magari gli chiedi di spostare questa discussione in un topic creato a parte, magari con titolo: Adventure Games Studio ecc. ecc. così anche altri possono capire di cosa si parla, anzichè lasciarlo in "sviluppo multipiattaforma?)

Come aggiornare lo stato degli eventi globali? Ad esempio un personaggio mi ha dato una chiave a seguito di un dialogo. Come faccio ad aggiornare lo stato della chiave? Devo crearlo come oggetto nascosto da qualche parte della stanza e trattarlo come un normale oggetto? E se si, l'evento dove lo ficco, in mezzo al dialogo è possibile?

Qui innanzitutto bisogna fare un distinguo: si parla di "variabili globali" o di "oggetti dell'inventario"?
Mi spiego meglio: un personaggio che ti da una chiave si potrebbe configuare come mi da un "oggetto" da mettere nell'inventario. Per fare ciò bisogna innanzitutto creare un inventario: per crearlo (ammesso che tu non abbia utilizzato un "modello" di gioco già parzialmente strutturato) devi creare una GUI in cui posizionare un inventory window, magari acessibile premendo un pulsante sempre presente nello schermo mediante un'altra gui (ad esempio "inventory button). Una volta creata l'interfaccia grafica dell'inventario, crea un "item" nell'apposito menù: ad esempio iChiave (con la sua icona grafica, la sua icona puntatore, ecc.). A questo punto bisogna associare ad un determinato evento (ad esempio nel dialogo, Pippo chiede "mi dai la chiave" Topolino risponde: "certo eccola!") lo script: cPippo.AddInventory(iChiave).
Nell'inventory window comparirà l'item "iChiave"
Ora hai la chiave nell'inventario.
Se ora hai una porta e la vuoi aprire con la chiave hai due strade: o fai "usare" l'item iChiave sull'oggetto (o su hotspot) porta, oppure fai in modo che quando il personaggio clicchi sulla porta il programma verifichi che hai la chiave e, se ce l'hai, la apre:

facciamo un esempio concreto:
Dialogo:
cPippo.say("Hai la chiave?");
cTopolino.say("Certo!, eccola!");
cTopolino.LockView(12); //toplino cambia vista, assume ad es. la vista N.12 che è quella contente l'animazione di topolino che porge la chiave.
cTopolino.Animate(1, 7, eOnce, eBlock, eForwards); //animazione di topolino che porge la chiave (è solo un esempio)
Wait(5); //pausa di 5 cicli (40 cicli = circa 1 secondo)
cTopolino.UnlockView();
cTopolino.ChangeView(2); // topolino riassume la sua "forma normale" ad es. la vista N.2
cPippo.Addinventory(iChiave); // ora hai la chiave in inventario

Ora vediamo la funzione in caso tu voglia far usare la chiave sulla porta; supponiamo che la porta sia un object e supponiamo che tu voglia creare una funzione richiamata se il giocatore clicca sulla porta con un oggetto in inventario selezionato. la funzione sarà del tipo:

function oPorta_UseInv()
{
if (cPippo.ActiveInventory == iChiave) // se l'oggetto selezionato è proprio la chiave
{
if (porta_aperta == 0) // se la porta è chiusa
{
cPippo.Walk(200, 200, eBlock); //pippo si avvicina alla porta, ad esempio in x=200 y=200
cPippo.FaceLocation(800, cDonald.y, eBlock); //pippo si gira verso destra
cPippo.LockView(20); //pippo cambia vista, assume ad es. la vista N.20 che è quella contente l'animazione di pippo che apre la porta con la chiave.
cPippo.Animate(1, 5, eOnce, eBlock, eForwards); //animazione di pippo che gira la chiave (è solo un esempio)
//qui ci sarebbe da far sentire il suono della serratura
porta_aperta = 1; //variabile porta aperta è posta pari ad uno
cPippo.UnlockView();
cPippo.ChangeView(1); // pippo riassume la sua "forma normale" ad es. la vista N.1
}
else //la porta è già aperta
{
cPippo.say("La porta è già aperta!");
}
else // ho selezionato un altro oggetto dall'inventario
{
cPippo.say("Non è l'oggetto giusto!");
}
}

In alternativa, se vogliamo semplicemente far interagire pippo con la porta e, solo se ha la chiave, questi la apre (senza usare l'oggetto dell'inventario) si fa così:

function oPorta_Interact()
{
if (cPippo.HasInventory(iChiave)) // se la chiave è presente nell'inventario
{
cPippo.Walk(200, 200, eBlock); //pippo si avvicina alla porta, ad esempio in x=200 y=200
cPippo.FaceLocation(800, cDonald.y, eBlock); //pippo si gira verso destra
cPippo.LockView(20); //pippo cambia vista, assume ad es. la vista N.20 che è quella contente l'animazione di pippo che apre la porta con la chiave.
cPippo.Animate(1, 5, eOnce, eBlock, eForwards); //animazione di pippo che gira la chiave (è solo un esempio)
//qui ci sarebbe da far sentire il suono della serratura
porta_aperta = 1; //variabile porta aperta è posta pari ad uno
cPippo.UnlockView();
cPippo.ChangeView(1); // pippo riassume la sua "forma normale" ad es. la vista N.1
}
else // non ha la chiave
{
cPippo.say("La porta è chiusa a chiave, ho bisogno della chiave!");
}
}
AprilSkies
Avatar utente
Avventuriero
Avventuriero
 
Messaggi: 422
Iscritto il: lunedì 7 maggio 2012, 12:59

Re: Sviluppo multipiattaforma

Messaggioda winz il giovedì 30 maggio 2013, 15:56

Perfetto, in generale ho capito la logica ora devo provare ad applicarla!
Grazie per gli esempi effettivamente è molto più facile capire il flusso logico cosi...
E come da tuo consiglio ho contattato un admin per spostare /rinominare il 3d in maniera più sensata visto che con i tuoi consigli sta diventando una vera e propria guida!
Per rispondere ad una tua domanda sull'inventario: si sto usando l'inventario pre-impostato con le immagini già create, funziona, però non mi vede le immagini e non capisco perchè...se vado nell'anteprima delle GUIs però le vedo...boo direi che questo problema lo affronteremo poi!

Ho un dubbio però:
ho provato a creare un dialogo tra i due personaggi, e ho notato che c'è una sezione apposita nel programma per crearli. L'esempio che mi hai fatto tu per usare gli oggetti in mezzo ai dialoghi è un esempio direttamente "stampato" nella funzione che fa scatenare l'evento. Ma è possibile secondo te creare l'evento o lanciarlo in seguito ad una determinata risposta di un personaggio? (perciò nello script dedicato al dialogo?) ad esempio qui in mezzo:

// Dialog script file
@S // Dialog startup entry point
EGO: Heila!
WINZ: Ciao a te!
return
@1 //qui nell'opzione 1 EGO chiede se WINZ può dargli la chiave
WINZ: Ok, eccoti la chiave che ti serve!
EGO: Grazie mille!
stop
"Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa."
A. Einstein
winz
Avatar utente
Esploratore
Esploratore
 
Messaggi: 120
Iscritto il: domenica 24 febbraio 2013, 14:27
Località: Torino

Re: Sviluppo multipiattaforma

Messaggioda AprilSkies il giovedì 30 maggio 2013, 16:06

Certo, si fa così:

// Dialog script file
@S // Dialog startup entry point
EGO: Heila!
WINZ: Ciao a te!
return
@1 //qui nell'opzione 1 EGO chiede se WINZ può dargli la chiave
WINZ: Ok, eccoti la chiave che ti serve!
cWINZ.LockView(12); //WINZ cambia vista, assume ad es. la vista N.12 che è quella contente l'animazione di WINZ che porge la chiave.
cWINZ.Animate(1, 7, eOnce, eBlock, eForwards); //animazione di WINZ che porge la chiave (è solo un esempio)
Wait(5); //pausa di 5 cicli (40 cicli = circa 1 secondo)
cWINZ.UnlockView();
cWINZ.ChangeView(2); // WINZ riassume la sua "forma normale" ad es. la vista N.2
cEGO.Addinventory(iChiave); // ora hai la chiave in inventario
EGO: Grazie mille!
stop

Quanto al fatto che non vedi correttamente la grafica per-impostata tieni presente che nel "modello2 per-impostato di AGS è utilizzato un color depth di 16 bit; se non le vedi durante il gioco può essere che hai impostato il tuo gioco sui 32 bit (fai subito questa verifica perchè è la prima cosa da verificare)
AprilSkies
Avatar utente
Avventuriero
Avventuriero
 
Messaggi: 422
Iscritto il: lunedì 7 maggio 2012, 12:59

Re: Sviluppo multipiattaforma

Messaggioda winz il giovedì 30 maggio 2013, 16:17

Che figata quindi posso utilizzare le funzioni direttamente nello script dei dialoghi!Ottimo :)

Per la tua domanda, si ho usato 32bit ! Mi conviene tornare a 16 o c'è un modo di fregarlo?? XD
Tanto poi sostituirò le immagini comunque...ma penso che la base la lascerò tanto mi sembra già ottimale
"Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa."
A. Einstein
winz
Avatar utente
Esploratore
Esploratore
 
Messaggi: 120
Iscritto il: domenica 24 febbraio 2013, 14:27
Località: Torino

Re: Sviluppo multipiattaforma

Messaggioda AprilSkies il giovedì 30 maggio 2013, 16:30

Avevo intuito che fosse per via della profondità.
Cmq:
O crei tu delle nuove "immagini" 32 bit e le sostituisci, oppure torni al 16 bit (ma poi tutte le immagini nuove devi farle in 16 bit). Non c'è altro modo. Ti consiglio di creare nuove immagini 32 bit; magari puoi "esportare" quelle in 16 bit, aprire con un programma di grafica e salvarle come 32 bit e poi importarle dentro ags sostituendo quelle che ci sono.

Quando sei pronto, passo alla domanda 3, dimmi tu ...
AprilSkies
Avatar utente
Avventuriero
Avventuriero
 
Messaggi: 422
Iscritto il: lunedì 7 maggio 2012, 12:59

Re: Sviluppo multipiattaforma

Messaggioda winz il giovedì 30 maggio 2013, 16:37

Ho fatto la prova con la lente d'ingrandimento, esportato lo sprite in photoshop, salvato come jpeg e reimportato....e come da tuo consiglio ...si vede!

Ecco qui una piccola parentesi sul formato delle immagini, da tua esperienza dici che il jpeg è meglio del bmp o viceversa?? io ero rimasto ai tempi in cui le bitmap erano dei mattoni a livello di pesantezza in kb! Però se qui come base vengono sempre usati i bmp ho detto a me stesso che ci sarà un motivo! E poi ho notato che quando si importano le immagini il programma ti chiede da dove vuoi che venga applicata la trasparenza... io ho provato a importare un personaggio in png però così ha già la trasparenza reale...cosa dici che sia meglio?

PS: in una giornata stai creando un mostro!! Mi stai facendo fare più esperienza tu in un giorno che una settimana passata a leggere guide :)
"Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa."
A. Einstein
winz
Avatar utente
Esploratore
Esploratore
 
Messaggi: 120
Iscritto il: domenica 24 febbraio 2013, 14:27
Località: Torino

Re: Sviluppo multipiattaforma

Messaggioda AprilSkies il giovedì 30 maggio 2013, 16:44

Jpeg dimenticali, perchè lo sfondo trasparente ti verrebbe malissimo.
Vanno bene invece GIF (per cui è prevista l'importazione "rapida"), Bitmap e PNG. Non preoccuparti del peso perchè poi AGS quando li importa li "trasforma" in oggetti propri. Importante è che l'immagine abbia uno sfondo uniforme che puoi rendere trasparente all'occorrenza.
Io personalmente tutte le immagini degli sprites ustilizzati in Donald Dowell le ho create in Gif
AprilSkies
Avatar utente
Avventuriero
Avventuriero
 
Messaggi: 422
Iscritto il: lunedì 7 maggio 2012, 12:59

Re: Sviluppo multipiattaforma

Messaggioda winz il giovedì 30 maggio 2013, 16:55

Ok perfetto userò uno di quei 3 formati allora
"Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa."
A. Einstein
winz
Avatar utente
Esploratore
Esploratore
 
Messaggi: 120
Iscritto il: domenica 24 febbraio 2013, 14:27
Località: Torino

Re: Sviluppo multipiattaforma

Messaggioda AprilSkies il giovedì 30 maggio 2013, 17:04

magari fai un po' di prove e vedi.
Io per le immagini degli sprites ho usato GIMP2, un ottimo programma freeware che ti consiglio.

Dimmi tu quando sei pronti per la risposta N.3
AprilSkies
Avatar utente
Avventuriero
Avventuriero
 
Messaggi: 422
Iscritto il: lunedì 7 maggio 2012, 12:59

Re: Sviluppo multipiattaforma

Messaggioda winz il giovedì 30 maggio 2013, 17:09

GIMP l'avevo sentito, io uso photoshop, dici che GIMP è meglio?
Sono prontissimo! per ora ho tempo fino alle 18 poi andrò a casa...si sto ritagliando un po di tempo nel lavoro d'ufficio per dedicarmi ad ags! XD
E stasera spero di potermici dedicare tempo permettendo..
comunque sono tutt'orecchi! :)
"Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa."
A. Einstein
winz
Avatar utente
Esploratore
Esploratore
 
Messaggi: 120
Iscritto il: domenica 24 febbraio 2013, 14:27
Località: Torino

Re: Sviluppo multipiattaforma

Messaggioda winz il giovedì 30 maggio 2013, 17:22

Ho fatto una prova su quello che mi spiegavi prima , ho provato in un dialogo a mettere una "card" in inventario

@3
WINZ: Certo, ecco a te la carta musei!
cEgo.AddInventory(iCard); // ora hai la chiave in inventario
EGO: Grazie!!

Però mi da questo errore...
Dialog 0(19): Unknown command: cego.addinventory(icard). The command may require parameters which you have not supplied.

Ho creato il nuovo oggetto negli inventory items e messo l'immagine (solo quella grande in quanto dovrà apparire solo in inventario)...per il resto non ho modificato nulla....cosa avrò sbagliato o dimenticato?
"Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa."
A. Einstein
winz
Avatar utente
Esploratore
Esploratore
 
Messaggi: 120
Iscritto il: domenica 24 febbraio 2013, 14:27
Località: Torino

Re: Sviluppo multipiattaforma

Messaggioda AprilSkies il giovedì 30 maggio 2013, 17:38

Occhio alle maiuscole!!!!
devi scrivere
cEgo.AddInventory(icard) oppure iCard
AGS è case sentive!!!
AprilSkies
Avatar utente
Avventuriero
Avventuriero
 
Messaggi: 422
Iscritto il: lunedì 7 maggio 2012, 12:59

Re: Sviluppo multipiattaforma

Messaggioda AprilSkies il giovedì 30 maggio 2013, 17:39

altra cosa: nel dialogo devi mettere lo spazio davanti a cEgo.AddInventory(...)
AprilSkies
Avatar utente
Avventuriero
Avventuriero
 
Messaggi: 422
Iscritto il: lunedì 7 maggio 2012, 12:59

Re: Sviluppo multipiattaforma

Messaggioda winz il giovedì 30 maggio 2013, 17:46

Ahhhhhhh OK non avevo messo lo spazio nel primo spazio XDD
"Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa."
A. Einstein
winz
Avatar utente
Esploratore
Esploratore
 
Messaggi: 120
Iscritto il: domenica 24 febbraio 2013, 14:27
Località: Torino

Re: Sviluppo multipiattaforma

Messaggioda AprilSkies il giovedì 30 maggio 2013, 17:49

Ok ... Passiamo alla domanda 3:
3- Area cliccabile della chiave troppo stretta. Come ampliare l'area cliccabile di un oggetto? Ho fatto il classico esempio con la chiave ma per poterla prendere devo cliccare nel punto esatto dell'hotspot se non erro...ma è troppo piccolo per centrarlo al primo click!

Chiariamo una cosa: in AGS esistono Objects ed Hotspot;
Gli objects sono oggetti "separati" dal fondale, definiti graficamente da "propri sprites".
Gli Hotspots sono invece aree cliccabili del fondale (disegnati con appositi strumenti di "disegno" sul fondale stesso).
Gli oggetti hanno come proprietà la "visibilità" (possono essere visibili o invisibili, ad esempio oPorta.Visible = true;). Gli hotspot possono essere "abilitati" oppure no (ad esempio hQuadro.Enabled = true;)

La chiave immagino sia un "Objects". la "cliccabilità" di un oggetto con il puntatore del mouse implica che il puntatore si "trovi" (con il suo punto sensibile, definibile come coordinate relative nell'apposito menù dei puntatori) sopra i pixel dell'oggetto (sono escluse le aree dello sprite dell'oggetto che hai impostato come "trasparenti").

Se su un oggetto hai problemi di pixelhunting probabilmente è perchè è proprio piccolo lo sprite dell'oggetto. Se non puoi proprio ingrandire l'oggetto, il problema lo puoi risolvere con un "artifizio"; puoi procedere in infiniti modi (perchè non c'è limite alla fantasia dello scripter). Te ne segnalo uno più semplice (anche se meno ortodosso dal punto di vista dello script); altri metodi implicano una verifica costante (con le funzioni RepExec() della posizone del mouse nei confronti dell'oggetto, ma sono troppo complicanti visto che sei ancora all'inizio ... ne rimanderei la trattazione tra qualche mese, quando avrai più dimestichezza).

Metodo veloce ed efficace:
Disegna, dietro l'oggetto (quindi sul fondale) un hotspot più grande dell'oggetto (ad esempio un cerchio pieno attorno alla posizione in cui si trova l'oggetto. Chiama l'hotspot come l'oggetto (per "chiama" intendo dagli lo stesso nome dal punto di vista del "nome" che appare nel gioco, non il nome usato nello script). In questo modo se il mouse si trova sopra l'oggetto o sopra l'hotspot che gli si trova dietro, dal punto di vista del giocatore è uguale (legge la stessa scritta sul monitor). Poi fa in modo che cliccando sull'oggetto o sull'hotspot esegua il medesimo script!
Esempio stupido: clicco sulla chiave e la chiave scompare:

function oChiave_Interact()
{
oChiave.Visible = false; //la chiave scompare
hChiave.Enabled = false; //ricordati di disattivare anche l'hotspot che c'è dietro
}

Poi associa al click sull'hotspot il medesimo script, cioè:

function hChiave_Interact()
{
oChiave_Interact();
}

Spero sia chiaro. Per la risposta 4 rimandiamo a domani ;-D

p.s. GIMP ha molte delle funzionalità di photoshop, ma sopratutto è FREEWARE!!!!! :wink:
Inoltre, per la "pixel-grafica" è il migliore che c'è! (con photoshop la pixel grafica che fai con gimp te la scordi).
AprilSkies
Avatar utente
Avventuriero
Avventuriero
 
Messaggi: 422
Iscritto il: lunedì 7 maggio 2012, 12:59

Re: Sviluppo multipiattaforma

Messaggioda winz il giovedì 30 maggio 2013, 20:13

Eccomi!
Allora mi vergogno dicendoti che sono un programmatore (di quelli scarsi però XD) e potevo arrivarci da solo al trick che mi hai segnalato per l'hotspot :) ma anche se ho dimestichezza in generale con i linguaggi di programmazione, questo è un mondo nuovo per me quindi fai bene a non dare per scontato nulla perchè le logiche sono del tutto nuove per me!

Stasera o domani provo questo esperimento che mi hai consigliato...
Ora scarico Gimp...e lo faccio scaricare anche alla mia ragazza che si occuperà della grafica, è davvero un'ottima disegnatrice perciò la sfrutto...come tipo di grafica pensavo più che a pixel art alla grafica tipo quella della Daedelic...si è un puntare troppo in alto ma confido nelle doti della morosa! :)

Cambiando un attimo discorso...ma per caso sei un giocatore di WoW? Perchè nel tuo gioco ho notato che sopra al parrucchiere c'è un dettaglio (il palo rosso e bianco sopra la vetrina) che sembra ricondurre al "parrucchiere" che c'è in world of warcraft... casualità o easter egg? :)

Sei davvero gentile a seguirmi e se il mio progetto a lungo termine andrà in porto non mancherò di ringraziarti moltissimo all'interno del gioco...chissà magari posso invitare il tuo vecchietto nella mia storia come riferimento ad un gioco importante (come hai fatto tu per lo scienziato di Day of the tentacle) !!

Buona serata a presto!!
"Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa."
A. Einstein
winz
Avatar utente
Esploratore
Esploratore
 
Messaggi: 120
Iscritto il: domenica 24 febbraio 2013, 14:27
Località: Torino

Re: Sviluppo multipiattaforma

Messaggioda AprilSkies il venerdì 31 maggio 2013, 9:52

Non so se hai notato che c'è anche Maxlovegods che vuole dare avvio ad un gioco ... perchè non lo contatti?

p.s. la colonnina del barbiere in realtà è solo un caso ... non è un easter egg. Ci sono moltissime citazioni nel gioco, ma quella almeno non lo è :)
AprilSkies
Avatar utente
Avventuriero
Avventuriero
 
Messaggi: 422
Iscritto il: lunedì 7 maggio 2012, 12:59

Re: Sviluppo multipiattaforma

Messaggioda winz il venerdì 31 maggio 2013, 10:30

Giorno!
Azz ho beccato l'unica citazione nel gioco che non lo è XD

Comunque si ho visto riguardo a Max ma non credo molto nei progetti insieme a persone che non conosco, e ho visto troppi progetti andare in fumo facilmente perciò preferisco fare da me. Poi ho altri 2 ex colleghi che quando vedranno un pò di materiale sono sicuro che mi daranno una mano..
"Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa."
A. Einstein
winz
Avatar utente
Esploratore
Esploratore
 
Messaggi: 120
Iscritto il: domenica 24 febbraio 2013, 14:27
Località: Torino

Re: Sviluppo multipiattaforma

Messaggioda AprilSkies il venerdì 31 maggio 2013, 11:03

No certo ti capisco, anche noi siamo solo in due.

Cmq se riuscite a fare una grafica alla Daedalic sarebbe favoloso.
AprilSkies
Avatar utente
Avventuriero
Avventuriero
 
Messaggi: 422
Iscritto il: lunedì 7 maggio 2012, 12:59

Re: Sviluppo multipiattaforma

Messaggioda winz il venerdì 31 maggio 2013, 11:21

Eh infatti... è un puntare tanto in alto ma comunque non abbiamo fretta e la mia ragazza è davvero brava...appena farà qualche bozzetto ti farò vedere :)
Ora mi stavo leggendo la vostra intervista su jointheadventures XD
Ma tu sei Andrea o Giovanni??
"Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa."
A. Einstein
winz
Avatar utente
Esploratore
Esploratore
 
Messaggi: 120
Iscritto il: domenica 24 febbraio 2013, 14:27
Località: Torino

PrecedenteProssimo

Torna a Developer's Corner

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti