Benvenuto Visitatore(Log In|Registrati)

6 Pagine V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> PRIMI PASSI, L'angolo del principiante
AprilSkies
messaggio21 Nov 2014, 20:53
Messaggio #26



Gruppo icone

Gruppo: Oldgame Editor
Messaggi: 516
Iscritto il: 16 May 12
Utente Nr.: 19.376
BGE The secret of Monkey Island
Playing The secret of Monkey Island
SO WinVista




in che senso non ti legge?
spiegati meglio.
Cosa appare scritto?
 
Squall_Leonheart
messaggio21 Nov 2014, 21:05
Messaggio #27





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7






Questo sulla coppa blu e sull'armadio invece proprio niente, mentre prima dello script usciva tranquillamente
 
AprilSkies
messaggio21 Nov 2014, 21:18
Messaggio #28



Gruppo icone

Gruppo: Oldgame Editor
Messaggi: 516
Iscritto il: 16 May 12
Utente Nr.: 19.376
BGE The secret of Monkey Island
Playing The secret of Monkey Island
SO WinVista




fai questa prova:
Crea un'altra gui e un'altra label, con altri nomi e usa quelle nello script.
Vedi cosa succede.
 
Squall_Leonheart
messaggio21 Nov 2014, 21:28
Messaggio #29





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7




Ma ora che ci penso, non faccio prima a mettere nella stessa immagine con quella del cursore?
 
AprilSkies
messaggio21 Nov 2014, 21:36
Messaggio #30



Gruppo icone

Gruppo: Oldgame Editor
Messaggi: 516
Iscritto il: 16 May 12
Utente Nr.: 19.376
BGE The secret of Monkey Island
Playing The secret of Monkey Island
SO WinVista




No.
Cmq ora ho visto l'immagine, prima non la vedevo.
Stai usando i 9-verbs!!!!!!

Ora ho capito perché non ti va.

Cmq, ora devo uscire, proseguiamo domani.

Nel frattempo fai la prova che ti ho detto (crea altra GUI e altra label e metti quelle nello script), così capisci cosa fa lo script.
(e così inizi ad imparare il linguaggio)

Poi domani lo modifichiamo in modo che vada bene anche il 9-Verbs ;-)

a domani
 
Squall_Leonheart
messaggio21 Nov 2014, 21:38
Messaggio #31





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7




Va bene, aspetto una tua risposta, intanto testo e nel caso edito blush.gif
 
AprilSkies
messaggio22 Nov 2014, 10:59
Messaggio #32



Gruppo icone

Gruppo: Oldgame Editor
Messaggi: 516
Iscritto il: 16 May 12
Utente Nr.: 19.376
BGE The secret of Monkey Island
Playing The secret of Monkey Island
SO WinVista




Ho appena provato lo script che ti avevo dato la prima volta....

in realtà.. FUNZIONAVA PERFETTAMENTE!

A te non funzionava per un semplice motivo..... che è lo stesso per cui all'inizio non ti cliccava l'area camminabile: ovverosia la GUI.

La gui che ti portavi a spasso con il mouse era troppo grande e andava a finire sopra al puntatore.

ORA segui attentamente queste piccole istruzioni:

CANCELLA LO SCRIPT CHE HAI ADESSO E INCOLLA QUESTO SCRIPT (che poi era quello originario), senza cambiare nulla:

//COPIA DA QUI ==============
function repeatedly_execute()
{
if (Hotspot.GetAtScreenXY(mouse.x, mouse.y) == hotspot[0] && Object.GetAtScreenXY(mouse.x, mouse.y) == null && Character.GetAtScreenXY(mouse.x, mouse.y) == null && InventoryItem.GetAtScreenXY(mouse.x, mouse.y) == null)
{
gAction.Visible = false;
}
else
{
gAction.Visible = true;
String TESTO_TEMP; // dichiaro una variabile di tipo stringa
TESTO_TEMP = ActionLine.Text; // assegno alla stringa il contenuto della label della gui che vogliamo far seguire il mouse
int TESTO_Width = GetTextWidth(TESTO_TEMP, eFontFont0); //dichiaro una variabile integer e contestualmente ricavo la larghezza del testo. Qui suppongo che abbia usato il font "Normal". se hai usato un altro font, metti il font che hai usato.
int label_position = TESTO_Width / 2; //dichiaro una variabile integer e contestualmente gli assegno il valore pari a metà della larghezza testo
int label_offset; //dichiaro una variabile di offset
if (mouse.x - label_position < 0) label_offset = 5; //bordo sinistro 5 pixel
else if (mouse.x + label_position > 315) label_offset = 315 - TESTO_Width; //qui suppongo tu abbia la risoluzione larga 320 pixel
else label_offset = mouse.x - label_position;
if (mouse.y > 50)
{
gAction.SetPosition(label_offset, mouse.y - 20); //gli do 20 pixel in alto. poi vedi tu. varia il "20" e vedi come si vede.
}
else
{
gAction.SetPosition(label_offset, mouse.y + 10); //gli do 30 pixel in basso. poi vedi tu. varia il "30" e vedi come si vede.
}
}
}
//COPIA FINO QUI ==============

POI IMPORTANTE:

VAI NELLA GUI gAction
e cambia questi parametri:
gAction ----> MENU a destra HEIGHT di default il valore è 57, tu portalo a 10 <---- molto importante
label ActionLine ----> MENU a destra TextAlignement di default è "topMiddle" , tu portalo a TOP-LEFT <---- molto importante

Messaggio modificato da AprilSkies il 22 Nov 2014, 11:00
 
Squall_Leonheart
messaggio22 Nov 2014, 13:01
Messaggio #33





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7




Il risultato purtroppo è questo, avevo dimenticato di dirti che all'inizio la GUI non è visibile, la tolgo e metto attraverso il tasto F



Messaggio modificato da Squall_Leonheart il 22 Nov 2014, 13:06
 
AprilSkies
messaggio22 Nov 2014, 13:13
Messaggio #34



Gruppo icone

Gruppo: Oldgame Editor
Messaggi: 516
Iscritto il: 16 May 12
Utente Nr.: 19.376
BGE The secret of Monkey Island
Playing The secret of Monkey Island
SO WinVista




Metti l label all'interno della GUI in alto, il più alto possible.
E poi ricorda: metti l'allineamento a SINISTRA

Ti fa così perché hai lasciato il testo centrato.
 
Squall_Leonheart
messaggio22 Nov 2014, 16:06
Messaggio #35





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7




Bene adesso va con tranquillità blush.gif Grazie mille, se avrò ancora problemi riposterò!
 
Squall_Leonheart
messaggio24 Nov 2014, 15:57
Messaggio #36





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7




Eccomi di nuovo, non mi è chiara una cosa.
Cercavo di creare un animazione della porta che si apre, ora ho capito il comando per riprodurre un suono e quello per muovere il personaggio nella stanza e per fargliela cambiare. Però non riesco a far muovere un oggetto. Per creare questa piccola animazione, avevo pensato funzionasse questo comando "MoveObject (1, 15, 100, 0) ;" Ma mi sbagliavo. Quindi mi chiedevo innanzitutto se la mia scelta, ossia quella di muovere la porta e poi cambiarle grafica fosse giusta, e nel caso anche quale comando si usa per intendere il movimento di un oggetto. Consigli?
 
AprilSkies
messaggio24 Nov 2014, 18:58
Messaggio #37



Gruppo icone

Gruppo: Oldgame Editor
Messaggi: 516
Iscritto il: 16 May 12
Utente Nr.: 19.376
BGE The secret of Monkey Island
Playing The secret of Monkey Island
SO WinVista




Allora bisogna distinguere due casi:

- Animazione propriamente detta, ovverosia una sequenza di immagini (una sequenza di sprites) che si susseguono ad una certa velocità (esattamente come l'animazione del personaggio che cammina)

- Movimento di un oggetto su schermo, ovverosia il traslare quest'ultimo da una posizione ad un'altra, ad una certa velocità.

NOTA: le due cose si possono anche "combinare" ovvero un oggetto mentre si muove può anche essere animato.

Nel primo caso, Animazione propriamente detta, è necessario creare una "view" a all'interno della view uno o più "loop" di animazioni.
Quindi si "assegna" preliminarmente una "vista all'oggetto, tramite script: Esempio oCup.SetView(..., ..., ..) VEDI MANUALE PER MAGGIORI DETTAGLI
Poi si può eseguire l'animazione. Il comando è oCup.Animate(..........) VEDI MANUALE PER MAGGIORI DETTAGLI

Nel secondo caso, il comando è oCup.Move(X, Y, velocità ecc. ecc.....) VEDI MANUALE PER MAGGIORI DETTAGLI
 
Squall_Leonheart
messaggio25 Nov 2014, 12:19
Messaggio #38





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7




Grazie blush.gif
Ora purtroppo ho un altro problema, avevo creato un interruttore della luce, poi avevo pensato di renderlo interaggibile e quindi di cambiare frame del background per luce accesa o spenta.. Però mi succede che il gioco si blocca. Se metto Background 0 invece non fa nulla. Vi posto lo script :

function hLuce_AnyClick()
{
if(UsedAction(eGA_LookAt)) {
player.Say("L'interrutore della luce.");
}
else if(UsedAction(eGA_Use)) {
SetBackgroundFrame(2);
}
else Unhandled();
}


 
AprilSkies
messaggio25 Nov 2014, 16:48
Messaggio #39



Gruppo icone

Gruppo: Oldgame Editor
Messaggi: 516
Iscritto il: 16 May 12
Utente Nr.: 19.376
BGE The secret of Monkey Island
Playing The secret of Monkey Island
SO WinVista




Prova:

function hLuce_AnyClick()
{
if(UsedAction(eGA_LookAt)) {
player.Say("L'interrutore della luce.");
}
else if(UsedAction(eGA_Use))
{
if (GetBackgroundFrame()==0) SetBackgroundFrame(1);
else SetBackgroundFrame(0);
}
else Unhandled();
}
 
Squall_Leonheart
messaggio25 Nov 2014, 19:52
Messaggio #40





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7




Ma come si disattiva l'animazione della stanza? Perché ora è animata.
 
AprilSkies
messaggio25 Nov 2014, 21:31
Messaggio #41



Gruppo icone

Gruppo: Oldgame Editor
Messaggi: 516
Iscritto il: 16 May 12
Utente Nr.: 19.376
BGE The secret of Monkey Island
Playing The secret of Monkey Island
SO WinVista




devi bloccarla all'inizio, in RoomLoad scrivendo SetBackgroundFrame(0)
 
Squall_Leonheart
messaggio25 Nov 2014, 23:33
Messaggio #42





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7




Riuscito blush.gif!

Messaggio modificato da Squall_Leonheart il 25 Nov 2014, 23:34
 
Squall_Leonheart
messaggio26 Nov 2014, 16:25
Messaggio #43





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7




Aspetta dimenticavo di dirti che accendevo e spegnevo delle REgions..
if (GetBackgroundFrame()==0) SetBackgroundFrame(1);
else SetBackgroundFrame(0);
region[1].Enabled = true;
region[2].Enabled = true;
region[0].Enabled = false;
}
else Unhandled();
}
Così quando la uso si muovono quelle regions però quando ho bisogno di invertirle di nuovo mi da un errore se le affianco a Get..
 
AprilSkies
messaggio26 Nov 2014, 17:45
Messaggio #44



Gruppo icone

Gruppo: Oldgame Editor
Messaggi: 516
Iscritto il: 16 May 12
Utente Nr.: 19.376
BGE The secret of Monkey Island
Playing The secret of Monkey Island
SO WinVista




Occhio che così non le accendi spegni correttamente biggrin2a.gif

dovresti fare una cosa del genere:

.....
if (GetBackgroundFrame()==0)
{
SetBackgroundFrame(1);
region[1].Enabled = true;
region[2].Enabled = true;
region[0].Enabled = false;
}
else
{
SetBackgroundFrame(0);
region[1].Enabled = false;
region[2].Enabled = false;
region[0].Enabled = true;
}
}
else Unhandled();
}
 
Squall_Leonheart
messaggio26 Nov 2014, 18:18
Messaggio #45





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7




Una curiosità, associando una Region e quindi uno schiarimento del pg in base all'apertura o meno della porta, scrivendo il codice in questo modo sarebbe corretto?

if (GetBackgroundFrame()==0)
{
SetBackgroundFrame(1);
region[1].Enabled = true;
region[2].Enabled = true;
region[0].Enabled = false;
if (hPorta.Enabled ()==true) {
region[3].Enabled = true;
}
else
{
region[3].Enabled = false;
}
}
else
{
SetBackgroundFrame(0);
region[1].Enabled = false;
region[2].Enabled = false;
region[3].Enabled = false;
region[0].Enabled = true;
}
}
else Unhandled();
}
 
AprilSkies
messaggio27 Nov 2014, 18:17
Messaggio #46



Gruppo icone

Gruppo: Oldgame Editor
Messaggi: 516
Iscritto il: 16 May 12
Utente Nr.: 19.376
BGE The secret of Monkey Island
Playing The secret of Monkey Island
SO WinVista




Ciao SQ
Scusa il ritardo.

Detto così faccio un po' fatica a seguirti.
Spiegami meglio cosa vuoi fare. L'ideale sarebbe che tu editassi il post precedente aggiungendo dei commenti per spiegare, in ogni riga, cosa vorresti fare. Così riesco a dirti se il codice fa o meno quello che hai in mente. E, in caso contrario, ti dico come fare.
I commenti sono importanti. Cerca di prendere "il vizio" di metterli.

P.S. C'è cmq un errore di sintassi togli () da hPorta.Enabled
Si scrive hPorta.Enabled e basta.

Messaggio modificato da AprilSkies il 27 Nov 2014, 18:18
 
Squall_Leonheart
messaggio27 Nov 2014, 19:45
Messaggio #47





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7




Ti spiego subito , ho due problemi. Il primo è che avendo la porta all'ingresso che si apre, se a luce spenta nella stanza la apro, dovrebbe attivarsi la region che gestisce la luce proveniente da fuori.
Due, Gestisco la stessa stanza in due room. Una per una metà e una per l'altra. Quindi volevo attribuire il cambio sfondo in due stanze per quel solo interruttore. Ora riflettendoci credo che bisognerebbe attribuirlo ad una variabile e scriptare questo:
// dichiaro variabile
int LUCE

LUCE == 0

Se comando usa su interrutore della luce
se sfondo zero passa ad uno e fissa LUCE a 1
Altrimenti
sfondo zero e luce a 0

E poi nell'altra stanza mettere la condizione :
Se luce è 0 sfondo zero, se luce e 1 sfondo 1.

Sono stato comprensibile?
 
AprilSkies
messaggio27 Nov 2014, 20:26
Messaggio #48



Gruppo icone

Gruppo: Oldgame Editor
Messaggi: 516
Iscritto il: 16 May 12
Utente Nr.: 19.376
BGE The secret of Monkey Island
Playing The secret of Monkey Island
SO WinVista




Quella della variabile è un'ottima idea, però attento ad una cosa:
Se dichiari una variabile in una stanza essa non viene letta nell'altra stanza.
Nel vecchio AGS (versione 2.7 e precedenti) bisognava "esportare" le variabili il che era fastidioso.
Ora, dalla versione 3 in poi, per fortuna esiste una cosa utilissima che si chiama "GLOBAL VARIABLE" ... ecco scoperto a cosa serve, nel menù a destra la voce "global variables". vai lì e crea lì dentro una variabile globale che si chiama "luce" biggrin2a.gif

A quel punto sì, la tua idea può funzionare!

IMPORTANTE:
ogni volta che entri in una stanza, in RoomLoad
metti uno script che se luce == 1 imposta le regions e gli sfondi in modo giusto ;-)
 
Squall_Leonheart
messaggio27 Nov 2014, 20:58
Messaggio #49





Gruppo: Gamer
Messaggi: 83
Iscritto il: 8 November 14
Utente Nr.: 20.571
SO Windows7




Ho fatto così ma mi da un errore di sintassi :/

function hLuce_AnyClick()
{
if(UsedAction(eGA_LookAt)) {
player.Say("L'interrutore della luce.");
}
else if(UsedAction(eGA_Use))
{
MovePlayer(20, 167);
if (GetBackgroundFrame()==0)
{
SetBackgroundFrame(1);
Luce = 1;
region[1].Enabled = true;
region[2].Enabled = true;
region[0].Enabled = false;
if hPorta.Enabled = true
region[3].Enabled = true;
}
else
region[3].Enabled = false;
}
else
{
SetBackgroundFrame(0);
Luce = 0;
region[1].Enabled = false;
region[2].Enabled = false;
region[0].Enabled = true;
}
}
else Unhandled();
}
 
AprilSkies
messaggio27 Nov 2014, 22:07
Messaggio #50



Gruppo icone

Gruppo: Oldgame Editor
Messaggi: 516
Iscritto il: 16 May 12
Utente Nr.: 19.376
BGE The secret of Monkey Island
Playing The secret of Monkey Island
SO WinVista




Quando ti da errore di sintassi, però devi annotarti in quale riga te lo da e magari evidenziarmela...
cmq ce n'è uno abbastanza lampante:
RICORDA: gli operatori logici come IF, WHILE ecc. Vogliono l'argomento tra parentesi,
inoltre quando attribuisci un valore ad un variabile si usa "=" quando vuoi verificare un'ugualianza, invece, devi scrivere "=="

tu ad esempio hai scritto:
if hPorta.Enabled = true
invece dovrebbe essere if (hPorta.Enabled == true)

inoltre move player non esiste, al più è player.Move... e cmq è meglio usare la funzione "walk" così se hai il walkcycle lo usa automaticamente.

CITAZIONE (Squall_Leonheart @ 27 Nov 2014, 20:58) *
Ho fatto così ma mi da un errore di sintassi :/

function hLuce_AnyClick()
{
if(UsedAction(eGA_LookAt)) {
player.Say("L'interrutore della luce.");
}
else if(UsedAction(eGA_Use))
{
Player.Walk(20, 167,eBlock,eWalkableArea);
if (GetBackgroundFrame()==0)
{
SetBackgroundFrame(1);
Luce = 1;
region[1].Enabled = true;
region[2].Enabled = true;
region[0].Enabled = false;
if (hPorta.Enabled == true) region[3].Enabled = true;
}
else region[3].Enabled = false;
// DA QUI IN POI HAI FATTO UN PASTICCIO CON LE PARENTESI GRAFFE c'è un else che chiude le if delle azioni e poi else unhandled.....
}
else
{
SetBackgroundFrame(0);
Luce = 0;
region[1].Enabled = false;
region[2].Enabled = false;
region[0].Enabled = true;
}
}
else Unhandled();
}


TI PREGO, METTI I COMMENTI PRIMA DI OGNI BLOCCO E SPIEGAMI COSA VUOI FARE
Così controllo se il codice lo fa o meno.

 

6 Pagine V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 utenti stanno leggendo questa discussione (1 visitatori e 0 utenti anonimi)
0 utenti:

 

Modalità di visualizzazione: Normale · Passa a: Lineare · Passa a: Outline


Versione Lo-Fi Oggi è il: 16th July 2019 - 22:21