Nobody Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 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: 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ę.
Nobody Opublikowano 17 Lipca 2009 Autor Opublikowano 17 Lipca 2009 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
PsichiX Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 udoskonal to a z przyjemnością dodam to do zasobów GMClanu :D
Nobody Opublikowano 17 Lipca 2009 Autor Opublikowano 17 Lipca 2009 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 gnysek Opublikowano 17 Lipca 2009 Administratorzy Opublikowano 17 Lipca 2009 ___________________________________________ 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
Nobody Opublikowano 17 Lipca 2009 Autor Opublikowano 17 Lipca 2009 O, w inpucie chyba zapomniałem sprawdzać, czy parent istnieje :P To teraz będę musiał wrzucić wersję bez bugów :P
Darlix Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 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
Nobody Opublikowano 17 Lipca 2009 Autor Opublikowano 17 Lipca 2009 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.
Darlix Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 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.
Dżamper Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 Wtedy by zaś pisało, że ta funkcja jest tylko w wersji Pro... Dziwne.
Administratorzy gnysek Opublikowano 17 Lipca 2009 Administratorzy Opublikowano 17 Lipca 2009 W GM8 nie ma tej funkcji. Przyznaj sie, ze nie wypakowałeś :)
Darlix Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 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?
Nobody Opublikowano 17 Lipca 2009 Autor Opublikowano 17 Lipca 2009 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!
Administratorzy gnysek Opublikowano 17 Lipca 2009 Administratorzy Opublikowano 17 Lipca 2009 sprite_add_alpha jest w GM8 inaczej skonstruowane z tego co pamietam.
Nobody Opublikowano 17 Lipca 2009 Autor Opublikowano 17 Lipca 2009 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...
Darlix Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 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.
47xxxxxxxx Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 To zrób se w Edytorze spritów alpha <_<
Kofel Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 Mówie o eventach typu: button.onClick = nazwa_skryptu;
Nobody Opublikowano 17 Lipca 2009 Autor Opublikowano 17 Lipca 2009 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
Kofel Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 źle to opisałeś bo zupełnie rozumiem twojego cytowanego tekstu... serio ;P Gdzie to mam użyć, bo te funkcje czy co to jest są bezsensu?
Nobody Opublikowano 17 Lipca 2009 Autor Opublikowano 17 Lipca 2009 Akcja do wykonania w postaci stringa :P np: onclick = "show_message( ';o' );"
Kofel Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 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?
Nobody Opublikowano 17 Lipca 2009 Autor Opublikowano 17 Lipca 2009 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 :)
PsichiX Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 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
Kofel Opublikowano 17 Lipca 2009 Opublikowano 17 Lipca 2009 Nom ja się pomyliłem, miał być index a nie string ;p
Crackkk-GM Opublikowano 19 Lipca 2009 Opublikowano 19 Lipca 2009 btw, aż mi się zachciało GUI albo nawet API zrobić xDXeAPI :D @topic: w porównaniu do twojego, moje to totalna porażka :) 5.
PsichiX Opublikowano 19 Lipca 2009 Opublikowano 19 Lipca 2009 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 :)
Rekomendowane odpowiedzi
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ę