Fastbar
Powrót do strony głównej
Trzymaj pliki na gmclan.org!
Game Maker w pytaniach i odpowiedziach!
Polska dokumentacja
Tabela wyników ligi 24
Pobierz GM
Kategorie bazy artykułów
Artykuły -> Game Maker -> Kursy GML
Treść artykułu
Surfaces - co i jak
autor: Maximal (31.03.07)
Surfaces (ang. powierzchnia) to jedno z wielu dobrodziejstw Game Makera, które bardzo ułatwiają życie programiście. Przez wielu uważane za skomplikowane, trudne w obsłudze i niepotrzebne. Niesłusznie. W tym krótkim artykule postaram się przybliżyć zasadę działania surfaces.

Czasem mamy potrzebę narysowania na ekranie czegoś, co będzie odseparowane od reszty i łatwe w modyfikacji (np. HUD w grze). W takim wypadku najczęściej bawimy się w rysowanie kolejnych elementów w zależności od wartości jakiejś zmiennej. Jest to metoda może i skuteczna, ale niezbyt wygodna. Zamiast się tak katować, lepiej użyć surfaces - bo właśnie głównie do takiego typu zadań są one przeznaczone.

Jak to działa?

Surface to, mówiąc najprościej, powierzchnia, na której możemy zapisać jakieś elementy (figury, obrazki itp.). Dzięki temu, że wszystkie te elementy są ze sobą powiązane, możemy łatwo je obrócić, zeskalować, pokolorować, oteksturować, czy skopiować do pliku. Do obsługiwania powierzchni służą odpowiednie funkcje. Najważniejsze z nich postaram się opisać tutaj.

Pierwsze, co należy zrobić, to stworzyć nowego surface'a o określonych wymiarach. Służy do tego polecenie
gml:
new_surface = surface_create(szerokość, wysokość);
Funkcja ta zwraca id powierzchni, które będzie niezbędne do wywołania dalszych funkcji.

Teraz postaramy się narysować coś na naszym surface. Aby tego dokonać, musimy rozpocząć tryb edycji powierzchni. Służy do tego komenda
gml:
surface_set_target(id_naszego_surface);
Bezpośrednio po tym możemy używać funkcji rysujących np. draw_circle.

Uwaga, ważne!
Surface'a nie wolno edytować w evencie Draw! Może to spowodować niewłaściwe rysowanie.

A jak zakończyć tryb edycji? Wystarczy wpisać
gml:
surface_reset_target();


Nie pozostaje nam nic innego jak wyświetlić naszego surface'a. W evencie Draw piszemy
gml:
draw_surface(id_naszego_surface,x,y);


Proste, prawda?
Teraz czas wykorzystać zdobytą wiedzę w praktyce. Napiszemy program, który pozwoli użytkownikowi stawiać na ekranie kolorowe kółka.

Tworzymy nowy obiekt i nazywamy go obj_surface. Następnie piszemy:

Create:
gml:
new_surface = surface_create(room_width,room_height); // tworzymy nowego suface'a o wymiarach room'a
surface_set_target(new_surface);//rozpoczynamy tryb edycji
draw_set_color(c_black);
draw_rectangle(0,0,room_width,room_height,0); //czyścimy surface'a, rysując na ekranie czarny prostokąt
surface_reset_target(); //kończymy tryb edycji


Step:
gml:
if ( mouse_check_button_pressed (mb_left) )
{

     surface_set_target(new_surface);
     col1 = make_color_rgb(random(255),random(255),random(255));
     col2 = make_color_rgb(random(255),random(255),random(255));
     draw_circle_color(mouse_x,mouse_y,100,col1,col2,0);
     // jeżeli user kliknie myszą, rysujemy koło w losowym kolorze
     surface_reset_target();

}


Draw:
gml:
draw_surface(new_surface,0,0);


Uruchamiamy grę i chwilę rozkoszujemy się stawianiem kółek na ekranie.

Teraz dodamy do naszego programu możliwość zapisu.
Do eventa Step dopisujemy:
gml:
if (keyboard_check_pressed(vk_space))
{

     surface_save(new_surface,'obrazek.bmp');

}


Łatwo możemy też dodać obracanie, skalowanie, rozjaśnianie obrazu, posługując się funkcją draw_surface_general. Ale to już pozostawiam Wam. :)


A na koniec kilka ważnych uwag.

-Surfaces nie działają poprawnie w trybie 3D. Można używać ich dopiero po zakończeniu tegoż trybu (d3d_end()), ale należy pamiętać, że po ponownym uruchomieniu trybu 3D, surfaces zostaną zniszczone.
-Surfaces są zapisywane w pamięci karty graficznej. W skutek tego można utracić surface'a podczas np. zmiany rozdzielczości czy włączenia się wygaszacza ekranu.
-Surfaces nie są zapisywane wraz z grą.


Mam nadzieję że ten art pomógł zrozumieć istotę i zastosowanie surfaces. Po więcej zapraszam do helpa i mojego przykładu Menu z użyciem surfaces.
Pozdrawiam.
głosów: 13 | ocena: 9.00 oceń zasób | dodał: Maximal
Komentarze
stron: 21

2


47xxxxxxxx (18:35, 16.06.2009)

a w ID surfaca trzeba dać jego nazwę?bo nie wiem jak pobrać ID

av

Marek.S (18:42, 16.06.2009)

funkcja surface_create zwraca jego uchwyt, ktory trzeba przypisać do zmiennej aby móc się potem do niego odwoływać.

47xxxxxxxx (19:03, 16.06.2009)

to mam dobrze

av

pivot18 (19:27, 4.10.2009)

a jak wyciąć w surface coś?

av

ZeroXbot (19:35, 4.10.2009)

surface_copy_part(destination,x,y,source,xs,ys,ws,hs) - to jest kopiowanie jeśli o to ci chodzi. Zajrzał bys do dokumentacji

av

pivot18 (23:18, 4.10.2009)

daj link do dokumentacji o nie mogę znaleść

av

ZeroXbot (14:08, 5.10.2009)

nie możesz zajrzeć do dokumentacji GMa w dziale SURFACES?

av

pivot18 (21:22, 5.10.2009)

Ale polskA wersja

av

ZeroXbot (21:44, 5.10.2009)

no to skoro nie ma jej w tym miejscu w polskiej dokumentacji co w oryginale to znaczy że nie ma polskiej wersji

av

Makary155 (8:44, 6.10.2009)

Jestem prawie pewien że chodzi ci o stworzenie latarki. Nie musisz nic wycinać, wystarczy namalować białe światło na czarnym tle i rysować na surfie z użyciem draw_set_blend_mode(bm_subtract) tak jak w przykładzie "cykl dnia i nocy"

av

pivot18 (22:04, 7.10.2009)

aha dzięx

av

kamcio540 (20:26, 6.05.2010)

zmieniłem kod zapisywania surfaca na taki: if (keyboard_check_pressed(vk_space))
{
get_string("podaj nazwe pliku","";
surface_save(new_surface,'kickflip2.bmp';
}
{
sprite_merge('kickflip2.bmp',add)
}

i wyskakuje bład:

ERROR in
action number 2
of Step Event
for object obj_edytor_grafiki:

Trying to merge from non-existing sprite.

av

Marek.S (20:28, 6.05.2010)

w sprite_merge podajesz identyfikator sprita który jest załadowany w pamięci gm a nie gdzieś w pliku.

av

kamcio540 (20:31, 6.05.2010)

wiec?musze zmienic sprite_merge('kickflip2.bmp',add)
na sprite_merge("kickflip2.bmp",add)?

av

Marek.S (20:35, 6.05.2010)

po co w ogóle zapisujesz tego surface do pliku?
zrób z niego sprita i wtedy zmerguj

av

kamcio540 (20:37, 6.05.2010)

a jak to zrobic?

av

bluks (20:40, 6.05.2010)

Czemu się nie dziwię że to ty?

av

Marek.S (20:54, 6.05.2010)

add sprite from surface czy jakoś tak. poszukaj sobie w dokumentacji.

av

TheMarcQ (18:38, 7.05.2010)

myślisz że on to zrobi? On nie wie gdzie jest dokumentacja, zaraz będzi temat gdzie o to pyta

H2S04 (4:05, 5.12.2015)

Miałem problem z rysowaniem surface krwi... Problemem był użyty view. Zamiast room_width i room_height trzeba użyć:
new_surface = surface_create(view_wview,view_hview);

stron: 21

2



Dodaj komentarz:
Treść:
Menu
Panel użytkownika
Jesteś niezalogowany!

Nie masz konta? Zarejestruj się
Użytkownicy on-line
96 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 93, userów: 3, ukrytych: 0
♔ I am Lord ♔ , Ice Cube, Gibki Kaktus

0 użytkownik(ów) na gmczacie i 0 bot(ów)
Shoutbox
Gibki Kaktus (18:35, 1.03.17):
Cóż, ostatnio patrzyłem dla wujka lapka. To MSI za 4800 zł taki zajebisty był. A potem pojawiła mi się reklama Maca za 18000zł. Części identyczne xD
I am Lord (16:48, 1.03.17):
Tak i to wcale mało nie zmienia, układ tego wszystkiego jest ważny, od niego zależy prędkość szyny, rozkład ciepła i sposób jego chłodzenia od razu też. Czasem muszą dodać tu i uwdzie condensatory filtrujące napięcie bo inaczej są cyrki z przepięciami jak w mojej toshibie, gdzie porty usb przebijają się na kartę dźwiękową
gnysek (16:41, 1.03.17):
Zazwyczaj faktycznie projektują tylko ułożenie elementów wewnątrz, ale nie ich wykonanie.
gnysek (16:41, 1.03.17):
Ale części na tej płycie i tak są zazwyczaj uniwersalne (audio i wifi od Realteka itp.)
I am Lord (15:50, 1.03.17):
ale design płyty głównej już leży po ich stronie. Muszą jakoś te komponenty innych producentów jakoś upakować do swojej obudowy prawda?
gnysek (15:02, 1.03.17):
Moim zdaniem nie powinno się mówić "producent laptopa" a "wydawca i projektant obudowy". Byłoby bardziej adekwatnie.
gnysek (15:02, 1.03.17):
Czemu? Przecież jakiej by marki laptop nie był, to i tak w środku są części innych producentów, włącznie z ekranem. Nawet w makach często są procesory Intela i karty GeForce, czy nawet dyski Hitachi, a nie Apple.
Wojo (14:41, 1.03.17):
Nawet mnie nie rozśmieszaj mówiąc o Lenovo
gnysek (14:02, 1.03.17):
W takiej cenie dużo ładnych laptopów jest, ja mam ładnego białego Lenovo za pół ceny.
Wojo (12:52, 1.03.17):
Bo jakby nie patrzeć MacBooki wyglądaja schludnie i w sumie nadają się do takiego funkcjonowania na jakim mi zależy, ale wysoka cena to chyba nie tylko efekt ładnego designu
Wojo (12:51, 1.03.17):
W ogóle wyjaśnicie mi dlaczego ludzie przerzucają się na MacOS ? Co więcej on oferuje oprócz zmienionego interfejsu ? I do jakich zadań nadaje się lepiej niż windows ?
Wojo (11:52, 1.03.17):
Bardzo lubię Afrykę
I am Lord (15:47, 28.02.17):
Problemy pierwszego świata
ANtY (15:15, 28.02.17):
najgorzej jak samemu pale i nie ma mi kto DMUCHNĄĆ :/
ANtY (15:13, 28.02.17):
o kurde, ale mnie ominęło, rozkmina czemu końcówka blanta jest rozpalona xDDDD
YuuKun (14:30, 28.02.17):
*jeb*
Nikas (13:09, 28.02.17):
Przestań. ;d
Wojo (13:07, 28.02.17):
Dobra, przepraszam
Nikas (13:04, 28.02.17):
Przecież ja się o to nie kłóciłem, dlatego też nie rozwinąłem dalej tematu.
Wojo (13:04, 28.02.17):
Na prawdę
Wojo (13:04, 28.02.17):
Ja w ogóle nie jestem
Wojo (13:03, 28.02.17):
Nie ma to jak kłócić się o to kto jest większym ćpunem
Wojo (13:03, 28.02.17):
Nie dodawaj iskry do ognia Jakim
Nikas (12:44, 28.02.17):
xDDDDDD
Jakim (11:57, 28.02.17):
/
Jakim (11:56, 28.02.17):
_/
Jakim (11:56, 28.02.17):
__/
Jakim (11:56, 28.02.17):
____/
Jakim (11:56, 28.02.17):
_________/
Jakim (11:55, 28.02.17):
W nos? TYLKO W KABEL
Nikas (1:51, 28.02.17):
Jest dokładnie jak piszesz.
MaxGaming (1:43, 28.02.17):
Jak wrzucasz takie zdjęcia na insta to nie świadczy żebyś był tym na kogo pozujesz
MaxGaming (1:41, 28.02.17):
Znalazłezł się Rysiek Ridel który splifa nie umie rozpalić i nie wie co to maczanka XD Niech zgadnę walnąłeś kilka razy w nos i czujesz już dno? Xd Śmieszy mnie takie coś osobiście. Gdybyś sięgnął dna to byś inaczej gadał
Nikas (1:20, 28.02.17):
W swoim życiu upadłem kilka razy naprawdę poniżej poziomu człowieczeństa i brałem różne rzeczy. Naprawdę nie potrzebuję nauk, jeszcze o paleniu, od nieznajomego typa na gmc, bo nie zaskoczysz mnie niczym.
MaxGaming (0:58, 28.02.17):
A jak chcesz pogadaćo tym jaki syf ci wwalają do twojego "naturala" to możesz na PW podyskutujemy bo już trochę widziałem w tym temacie i widzę że jesteś z tych oświeconych że nie da się przecież nic ze splifem złego zrobić xd
Nikas (0:58, 28.02.17):
Lol.
MaxGaming (0:57, 28.02.17):
a jak ci się źle rozpala(mówimy o tytoniu) to po prostu najpierw opal sklejenie zapalniczką(podgrzej, nie podpal) to ładnie wysycha i nie ma żadnych problemów z rozpalaniem
MaxGaming (0:56, 28.02.17):
NIGDY JA ANI NIKT KOGO ZNAM NIE DMUCHAŁ XD ale skończmy temat serio w SB bo to nie jest miejsce wgl na takie szczegółowe rozmowy i pójdzie zaraz warn od 3F drugi raz :/
MaxGaming (0:55, 28.02.17):
Nadmiar bletki możesz mieć tylko z przodu i on ładnie sam się spala inaczej to nie wiem jak ty to robisz. Iskrzy jak jest maczanka(zazwyczaj tylko jakiś brix żeby na wadze było więcej, są też mity o dopach, ale na dopalaczach nigdy z iksrzeniem się nie spotkałem), popytaj w takim razie znajomych a jak chcesz maczać w krzystale to powodzenia xd I nie ucz ojca dzieci robić ;p
Nikas (0:41, 28.02.17):
Uuuu prosze, mamy tutaj widzę prawdziwego gracza, nook. Nie wiem skąd ta teoria z maczaniem. W czym maczany? W mieszance wody z fetą? Mefem? Może w kwasie? 8 lat palę i nie spotkałem takiego towaru. Jedynie maczarny w cukrze co się brylił i był gówniany. Ziomek palił jointa. Czasami jak się słabiej odpali to w jednym miejscu jest nadmiar bletki w który dmuchasz. I akurat uchwyciłem ten moment proszę pana eksperta. Podmuchaj sobie w jointa następnym razem to zobaczysz, piąteczka.
MaxGaming (0:39, 28.02.17):
Nie mogłeś po prostu pociągnąć zamiast on dmuchać? XDD Albo coś źle był "skonstruowany" ale już nic o tym nie piszę więcej bo będzie znowu warn xd
MaxGaming (0:38, 28.02.17):
Nigdy nie iskrzył mi spliff i nigdy nie dmuchał mi nikt żebym go lepiej rozpalił XD
Nikas (0:08, 28.02.17):
Ziomek dmuchał w niego żeby rozpalić, wiesz, tak to już działa na tej planecie. Jak dmuchasz w coś co się pali lub tli, to się rozpala jeszcze bardziej i uwaga - mogą lecieć wtedy iskry!
MaxGaming (23:53, 27.02.17):
BTW czemu twój spliff ze zdjęcia na insta się iskrzy? Tak wygląda na zdjeciu czy palisz maczane? XDD
Nikas (22:56, 27.02.17):
A dzięki.
Wojo (22:37, 27.02.17):
mocne foty xD
Nikas (22:34, 27.02.17):
Oczywiście, że mam instagram: www.instagram.com/krabonszcz
Wojo (22:23, 27.02.17):
gmclan to sekta
Czołg Krymski (22:22, 27.02.17):
jeszcze jest gmclan
Wojo (22:13, 27.02.17):
teraz cały internet kręci się w okół tych kilku stron
Ankieta
» Czy jesteś szczery odpowiadając w ankietach w Internecie?
Tak
Nie

GMCLAN to serwis o programie Game Maker i nie tylko.
Copyright © 2002-2017. GMCLAN.ORG
Wszelkie prawa zastrzeżone. Kopiowanie materiałów bez zgody redakcji zabronione!

[ Czas generowania strony: 0.01664 sekund ] [ Liczba zapytań MySQL: 16 ]

thecrims Otserv List Otserv LyricsTown Harry Potter Serwery Gier
dev nodev