Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Crack wystawiając swój SimpleGUI zmotywował mnie do stworzenia własnego :P

 

Póki co niewiele jest w nim opcji, ale może się komuś przydać. Jestem otwarty na propozycje :)

( Okienek nie da się rozszerzać przez kąty, jeszcze nie wiem czemu, ale to naprawię )

 

Link: https://gmclan.org/up2596_4_GUI.html

Screenshot:

guif.th.png

 

Aby utworzyć okienko należy stworzyć nowy obiekt, dać mu parenta o_window, a w Create dać kod:

GML
event_inherited();

 

create_window( "Nazwa okienka ( wyświetlana w pasku )", Szerokość okienka w pikselach, Wysokość okienka w pikselach, Możliwość rozciągania okna ( true/false ), [ Opcjonalnie ikonka ] );

 

// Kod na tworzenie elementów

element = create_element( Obiekt elementu ( o_text, o_button, o_input ), ID okienka, [ X w okienku, Y w okienku, Szerokość elementu, Wysokość elementu ] );

 

Uchwyt elementu potrzebny jest do ustawiania w nim zmiennych lub eventów.

text ( o_button, o_text, o_input ) - Tekst wyświetlany w przycisku, inpucie lub polu z tekstem.

 

Eventy:

o onclick ( o_button ) - Akcja, która ma się wykonać przy kliknięciu ( np. "instance_destroy();" zniszczy przycisk a "with( parent ) instance_destroy();" zniszczy całe okienko razem z elementami )

o onfocus ( o_input ) - To co powyżej, ale tylko przy aktywowaniu inputa

o onblur ( o_input ) - Akcja przy deaktywowaniu inputa ( kliknięcie gdzie indziej lub ENTER )

Akcje eventów ustalamy poprzez kod:

GML
element.onclick = "kod"; // np "instance_destroy();"

// lub

element.onclick = nazwaskryptu; // bez nawiasów!</span>

 

 

Każdym elementem można odwołać się do okienka poprzez zmienną parent.

 

W zmiennej text ( o_text ) można umieścić zmienne poprzez wpisanie w tekst "%zmienna%", np. "%global.lol%". W tekście zmienna ta będzie na bieżąco aktualizowana.

 

Myślę, że to już wszystko do opisywania :P Będę ulepszał ten GUI w miarę możliwości i czasu :) Dziękuję za uwagę.

 

EDIT2:

Niektórzy mogą mnie oskarżyć za plagiat z innego GUI ze strony, gdzie można też ściągnąć zakazany tu i wielce potrzebny program ( ^^ ). Tak, grafikę okienka wzorowałem na tamtej, grafiki elementów są cudzego autorstwa ale kod jest w stu procentach mój. Jak tylko się podszkolę w grafice lub ktoś będzie chętny mi pomóc to ją zmienię.

Opublikowano

GMowych? Raczej musiałbyś zrobić nowy obiekt, dać mu parenta np. o_button, tam porobić eventy i w okienku dodać ten element zamiast podstawowego... Ale mogę zrobić wykonywanie podanego kodu w niektórych eventach ( step, draw, etc. ) ale musiałbyś je wpisywać w stringa :P

Opublikowano

udoskonal to a z przyjemnością dodam to do zasobów GMClanu :D

Opublikowano

Zaraz dodam scrollbary i pobawię się w input taki jak windowsowy ( żeby można było przewijać tekst i edytować go w każdym miejscu a nie od końca ) ale to za mało do update'u, więc czekam na propozycje ( radio, checkboxy ? )

  • Administratorzy
Opublikowano

___________________________________________
ERROR in
action number 1
of Other Event: User Defined 0
for object o_input:

Error in code at line 1:
   if( width == 0 ) w = parent.wnd_Width - 9;

at position 29: Unknown variable wnd_Width

 

Gdy zamykałem drugie okienko. (najpierw to niżej, potem to wyżej)

 

Poza tym - naprawdę ładnie zrobione, chociaż trochę za dużo obiektów. Przydało by się to jakoś zrefaktorować.

Pomyśl, jak to jeszcze ulepszyć, usprawnić i myślę, że dodamy na stronę :P

Opublikowano

A u mnie się w ogóle nie otwiera.

FATAL ERROR in
action number 2
of Create Event
for object o_gui:

COMPILATION ERROR in code action
Error in code at line 2:
   windowBg = sprite_add_alpha( "window_bg.png", 0, 0, 1, 0, 0 );

at position 13: Unknown function or script: sprite_add_alpha

Opublikowano

Aaa... GM6 chyba nie obsługuje przezroczystości w obrazkach...

EDIT:

Nie, chwila... Dałem plik .gmk. W takim razie chyba nie masz wersji PRO.

Opublikowano

Wtedy by pisało ze nie mam pro. A tak przy okazji to konwertowałem na gm6 i to samo a potem gmk w gm8 i ten sam błąd. Nie mam wersji pro 7.0 ponieważ prawie niczym się nie różni od 6.1.

Opublikowano
Wtedy by zaś pisało, że ta funkcja jest tylko w wersji Pro... Dziwne.

 

Jak otwierałem w 6.1 pro i 8.0 beta tez jest pro wiec czemu miałoby mi wywalić że nie mam pro? :o

 

NIe przyznam się ponieważ wypakowałem i skonwertowałem na gm6 po czym otworzyłęm przez GM6.1 i wywaliło mi ten błąd. Nie mam GM7.0 na kompie zainstalowanego wiec postanowiłem otworzyć w GM8.0 i ten sam błąd wywaliło więc co wam nie gra?

 

E: Gnysio, jakiej funkcji?

Opublikowano

Damian nie mam pojęcia co się dzieje. Jednocześnie informuję, że poprzedni błąd z wyłączaniem okienka został naprawiony i dodałem suwak ( scrollbar ), gdy zawartość okienka wykracza poza niego ( na razie tylko w poziomie :P ). Link dalej ten sam :)

 

Enjoy!

Opublikowano

Ale sprite_add_alpha_from_sprite chyba działa na wszystkich wersjach. Jeżeli tak to po prostu wrzucę sprite'y okna i jego alphy do projektu i będzie po kłopocie...

Opublikowano

Po prostu gm6.1 i 8.0 nie mają funkcji sprite_set_alpha ;/

 

E: sprite_set_alpha_from_sprite też nie działa. Próbowałem.

Opublikowano
Uchwyt elementu potrzebny jest do ustawiania w nim zmiennych takich jak:

text ( o_button, o_text, o_input ) - Wiadomo

onclick ( o_button ) - Akcja, która ma się wykonać przy kliknięciu ( np. "instance_destroy();" zniszczy przycisk a "with( parent ) instance_destroy();" zniszczy całe okienko razem z elementami )

onfocus ( o_input ) - To co powyżej, ale tylko przy aktywowaniu inputa

onblur ( o_input ) - Akcja przy deaktywowaniu inputa ( kliknięcie gdzie indziej lub ENTER )

 

Póki co tyle :P

Opublikowano

Ok, tyle że ja bym zrobił coś takiego:

GML (Create)
btn_quit = newButton( "&Quit" );

btn_quit.onClick = "eventQuit";

 

GML (eventQuit)
/**

* argument0 - button instance

*/

 

if( argument0.text == "Quit" )

{

game_end();

}

 

Fajnie co?

Opublikowano

OK, mogę tak zrobić :P Ale po co tworzyć masę funkcji do pojedynczych elementów? Tworzenie zostanie, ale eventy mogę zrobić :)

 

EDIT:

Update. Teraz akcję eventów ustalamy poprzez

onclick = "kod";

lub

onclick = nazwaskryptu; ( bez nawiasów! )

 

Niestety są małe problemy z inputami, ale jestem w trakcie naprawiania :)

Opublikowano

zakładając że zdarzenia to funkcje bez argumentów:

 

skrypt: ShowAlert()

GML
show_error("dupa blada, sperniczyłeś gre! :0",false)

 

create:

GML
btn_alert=new(GUI_BUTTON)

btn_alert.onClick=ShowAlert // nie, to nie pomylka, dajemy mu bez cudzysllowia, bo to nie string a index skryptu ma przekazac</span>

 

automat obsługi zdarzeń:

GML
if(ExecEvent(EV_ONCLICK))

if(onClick>=0)

script_execute(onClick)

 

tak to robimy :)

btw, aż mi się zachciało GUI albo nawet API zrobić xD

Opublikowano

dobrze wiesz co miałem na myśli Kofelku :P

dla jasności: swego rodzaju automat zdarzeń pokroju WinAPI, tyle że dla GM. Bez sensu, bo przecież GM swoje ma, nie? NIE, bo to do wewnętrznych kontrolek takich jak nobody zaprezentował w swoim GUI :)

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...