[GEX] Finestre con objects (più o meno)

Gex, Dll, DyLib, Js e ogni tipo di estensione per GameMaker
Rispondi
Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

[GEX] Finestre con objects (più o meno)

Messaggio da Nix »

Con questa dll potete creare altre finestre in cui potete disegnarci con le normali funzioni di gm e potete impostare gli oggetti da mostrare lì.
Inoltre potete controllare la posizione del mouse, il click, e i tasti premuti.
Potete usarla ad esempio per un caricamento personalizzato, per finestre con le opzioni, ecc...
Nel GMK trovate l'esempio, e per ogni funzione c'è un commento con la spiegazione. Screenshot:
Spoiler
Immagine

NOTA: serve la dll GM .NET Layer per farla funzionare, e nella GEX non l'ho messa.

EDIT:
Funzioni della GEX:
  • wcreate:
    Crea una finestra, e restituisce il suo id.
    Caption è il testo della finestra, x, y, width, height sono le dimensioni, autorefresh indica se aggiornare automaticamente la finestra, e se mettete true, su backcolor mettete il colore di sfondo e su drawcode mettete il codice da eseguire ogni volta prima di refreshare.
  • waddobject:
    Imposta alcuni eventi per l'oggetto "object" in modo da farlo visualizzare sulla finestra "id".
    Il codice dentro draw verrà cancellato, quindi mettilo nell'argument draw.
    Verrà applicato solo alle instanze create dopo aver usato questa funzione.
  • wkeylist:
    Restituisce la lista ds_list dei tasti premuti fino al momento in cui viene usata (la funzione).
    Per evitare problemi dev'essere usata in ogni step (--> vedi wkeyclear), e non deve assolutamente essere usata da due object contemporaneamente, quindi fai che un solo oggetto di controllo assegni ad una variabile globale wkeylist ad ogni step (global.listatasti = wkeylist(idfinestra)).
  • wclickat:
    Restituisce true se si clicca nella posizione/range specificato.
    La posizione deve essere così: X|Y (ad es. 52|67) per controllare se il mouse clicca in quella posizione, o X1-X2|Y1-Y2 per controllare se il mouse clicca in quel rettangolo (ad es. 0-10|0-10).
    Se si clicca e la posizione scritta non è valida restituisce la costante invalid (mentre se non si sta cliccando sul rettangolo restituisce false)
    Se sull'argument2 mettete button_left, controllerà il click del tasto sinistro, con button_right quello destro, e con button_none nessuno, controllerà se la freccia si trova sopra quella posizione.
  • wclickobj:
    Uguale a wclickat, solo che invece della posizione dovete mettere l'id dell'istanza.
  • wshow, whide, wclose:
    Whow e whide mostrano/nascondono la finestra, mentre wclose la chiude, e non potrà più essere riaperta.
  • wclosed:
    Restituisce false se la finestra specificata è stata chiusa.
  • wtarget:
    Usando questa funzione, disegnerà sulla finestra anzichè sulla surface.
    Mettendo come id la costante t_none, resetterà il target e disegnerà sulla finestra del gioco.
    E' una forma rapida di surface_set_target(wsurface(id)) e di surface_reset_target()
  • wrefresh:
    Aggiorna la finestra.
  • wsurface:
    Restituisce l'id della surface della finestra.
  • wgetkey:
    Forma non automatica di wkeylist:
    Restituisce l'ultimo tasto premuto e lo toglie dalla queue dei tasti premuti (non confondetevi con la lista di wkeylist, non centra niente).
    Ad esempio, se nella finestra si premono A e B, usando tre volte getkey, restituirà prima il codice del tasto A, poi quello di B e poi -1.
    Restituisce la costante invalid (-1) se la lista è vuota.
  • wkeyclear:
    Cancella il queue dei tasti premuti (non confondetevi con la lista di wkeylist, non centra niente).
    A cosa serve? I tasti vengono aggiunti continuamente nella queue (una specie di lista) e non vengono mai cancellati, quindi potrebbe capitare (quando non usi wkeylist ad ogni step) che tu ottenga con getkey o keylist un tasto premuto un'ora fa. Questo perchè nelle finestre il controllo dei tasti avviene continuamente, non ogni 1 step.
    Perciò se non usi wkeylist ad ogni step e non usi wgetkey finchè non restituisce -1 (quello che fa wkeylist, restituisce tutti i tasti premuti finchè) ad ogni step, usa wkeyclear ad ogni step.
    Questo potrebbe sembrarti complicato, quindi limitati ad usare wkeylist ad ogni step, anche se non accedi alla sua lista.
Nella GEX le funzioni waddcontrolobj, e winit vengono eseguite automaticamente, quindi non ci sono.
Ultima modifica di Nix il 28/01/2011, 16:17, modificato 4 volte in totale.

Avatar utente
maz85
Admin
Messaggi: 8287
Iscritto il: 07/02/2004, 15:57
Specialità: Nientologo
Località: Oblio
Contatta:

Re: [DLL] Finestre con objects (più o meno)

Messaggio da maz85 »

Molto bella, interessante l'idea di usare una surface poi salvarla e caricare l'immagine sulle finestre figlie.
Se è tutta farina del tuo sacco, complimenti sei molto bravo.

Avatar utente
guidox
GMI Honor
Messaggi: 5765
Iscritto il: 26/07/2009, 17:23
Specialità: programmazione
Uso: GM:Studio 1.4 Android
Località: Marche
Contatta:

Re: [DLL] Finestre con objects (più o meno)

Messaggio da guidox »

Bella, l' unica pecca è che ogni finestra è un applicazione... :(
Immagine

Immagine

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

Re: [DLL] Finestre con objects (più o meno)

Messaggio da Nix »

Ho aggiunto la GEX, la guida per le funzioni e ho aggiunto avvertenze e spiegazioni più chiare riguardo a wkeylist e wkeyclear, visto che probabilmente tutti avrebbero sbagliato ad usarle.
guidox ha scritto:Bella, l' unica pecca è che ogni finestra è un applicazione... :(
Ma chi te l'ha detto? sono finestre, non applicazioni. se dovevano essere applicazioni, facevo che aprivano altri exe...
Se ti riferisci al fatto che non sono finestre child... bè, sono sempre collegate a quella principale, infatti se la chiudi chiude tutte le finestra.


EDIT: nel nuovo gmk mi sono scordato di mettere il codice per il testo nella finestra, se volete vederlo, mettete nell'oggetto control, nell'evento create e nella stringa vuota della prima funzione questo:

Codice: Seleziona tutto

draw_text(0,0, 'Premi il tasto A. E clicca una palla'); draw_text(0, 20, global.chars);
Ultima modifica di Nix il 17/09/2010, 15:21, modificato 1 volta in totale.

Avatar utente
guidox
GMI Honor
Messaggi: 5765
Iscritto il: 26/07/2009, 17:23
Specialità: programmazione
Uso: GM:Studio 1.4 Android
Località: Marche
Contatta:

Re: [DLL] Finestre con objects (più o meno)

Messaggio da guidox »

Nix ha scritto:Ma chi te l'ha detto?
Scusa...
Immagine

Immagine

Nix
GMI Advanced
Messaggi: 2437
Iscritto il: 26/12/2008, 18:14
Uso: GM:Studio 2
Contatta:

Re: [DLL] Finestre con objects (più o meno)

Messaggio da Nix »

guidox ha scritto:
Nix ha scritto:Ma chi te l'ha detto?
Scusa...
:confuso:

Avatar utente
Sla
GMI VIP
Messaggi: 3618
Iscritto il: 21/07/2008, 10:11
Specialità: Titanismo
Località: (gm) Italia
Contatta:

Re: [GEX] Finestre con objects (più o meno)

Messaggio da Sla »

Oh bien, la ho trovata finalmente. Good e mi scuso!
eppure mi sembra tutto giusto...

Avatar utente
nightwish88
GMI Advanced
Messaggi: 1739
Iscritto il: 18/01/2009, 13:41
Contatta:

Re: [GEX] Finestre con objects (più o meno)

Messaggio da nightwish88 »

non male... poco utile per chi programma giochi ma molto utile per chi programma programmi ( scusate il gioco di parole )
Immagine

Web Site: AFGames

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 24 ospiti