Benvenuto Visitatore(Log In|Registrati)
![]() ![]() |
21 Nov 2014, 20:53
Messaggio
#26
|
|
|
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? |
|
|
|
21 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 |
|
|
|
21 Nov 2014, 21:18
Messaggio
#28
|
|
|
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. |
|
|
|
21 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?
|
|
|
|
21 Nov 2014, 21:36
Messaggio
#30
|
|
|
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 |
|
|
|
21 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
|
|
|
|
22 Nov 2014, 10:59
Messaggio
#32
|
|
|
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 |
|
|
|
22 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 |
|
|
|
22 Nov 2014, 13:13
Messaggio
#34
|
|
|
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. |
|
|
|
22 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à
|
|
|
|
24 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? |
|
|
|
24 Nov 2014, 18:58
Messaggio
#37
|
|
|
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 |
|
|
|
25 Nov 2014, 12:19
Messaggio
#38
|
|
|
Gruppo: Gamer Messaggi: 83 Iscritto il: 8 November 14 Utente Nr.: 20.571 SO Windows7 |
Grazie
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(); } |
|
|
|
25 Nov 2014, 16:48
Messaggio
#39
|
|
|
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(); } |
|
|
|
25 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.
|
|
|
|
25 Nov 2014, 21:31
Messaggio
#41
|
|
|
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)
|
|
|
|
25 Nov 2014, 23:33
Messaggio
#42
|
|
|
Gruppo: Gamer Messaggi: 83 Iscritto il: 8 November 14 Utente Nr.: 20.571 SO Windows7 |
Riuscito
Messaggio modificato da Squall_Leonheart il 25 Nov 2014, 23:34 |
|
|
|
26 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.. |
|
|
|
26 Nov 2014, 17:45
Messaggio
#44
|
|
|
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
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(); } |
|
|
|
26 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(); } |
|
|
|
27 Nov 2014, 18:17
Messaggio
#46
|
|
|
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 |
|
|
|
27 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? |
|
|
|
27 Nov 2014, 20:26
Messaggio
#48
|
|
|
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" 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 ;-) |
|
|
|
27 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(); } |
|
|
|
27 Nov 2014, 22:07
Messaggio
#50
|
|
|
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. 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. |
|
|
|
![]() ![]() |
| Versione Lo-Fi | Oggi è il: 23rd October 2026 - 19:28 |