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
Zegar analogowy
autor: gnysek (18.02.06)
Nie raz na forum zadawano pytanie jak zrobić aby obiekt poruszał się po okręgu, zatem dzisiaj z nudów napisałem dość prosty przykład tego typu, czyli zegar analogowy. Najpierw omówię bardzo prosty zegar, potem zrobimy trochę trudniejszy.

Jedyne co musicie zrobić to stworzyć nowy obiekt i do Draw wklejać poniższy kod:

Najpierw namalujemy ramkę dla zegaru.
gml:
draw_circle(320,240,100,true);

Teraz zdefinujemy za pomocą var kilka zmiennych: sekx,seky - pozycja grotu wskazówki od sekund, minx, miny - pozycja grotu wskazówki od minut,
godzx, godzy, kpozycja grotu wskazówki godzin, sekl, minl, godzl - długość wskazówki sekund, minut i godzin.
gml:
var sekx,seky,minx,miny,godzx,godzy,sekl,minl,godzl;
sekl=100;
minl=90;
godzl=70;


Teraz ustawiamy wszystkie dane końcówek wskazówek, w tym celu posłużymy się dość zaawansowanym równaniem:
gml:
sekx=320+sekl*cos(degtorad(current_second*6-90));
seky=240+sekl*sin(degtorad(current_second*6-90));
minx=320+minl*cos(degtorad(current_minute*6-90));
miny=240+minl*sin(degtorad(current_minute*6-90));
godzx=320+godzl*cos(degtorad(current_hour*30-90));
godzy=240+godzl*sin(degtorad(current_hour*30-90));

sekundy i minuty mnożymy przez 6 dlatego, że 6*60=360, w przypadku godzin jest to 30*12, a od tego odejmujemy 90 stopni, dlatego że w Game Makerze (jak i w innych programach) kąt 0 stopni skierowany jest w prawo, a w zegarku w górę (czyli musimy albo odjąć 90 stopni, albo dodać 270). Liczba którą otrzymamy to kąt w pod którym powinna być skierowana wskazówka. Potem wyciągamy z tego sin lub cos, zależnie czy jest to współrzędna x czy y. Mnożymy to przez długość wskazówki i mamy już jej pozycję, wystarczy teraz tylko to wszystko dodać do pozycji z której wskazówka ma być malowana.

Na sam koniec namalujemy trzy strzałki
gml:
draw_arrow(320,240,sekx,seky,10);
draw_arrow(320,240,minx,miny,10);
draw_arrow(320,240,godzx,godzy,10);


Zegar ten niestety będzie mało przypominał taki prawdziwy, bowiem wskazówki będą przeskakiwały, i o ile z sekundami nie ma problemu, o tyle minuty już śmiesznie przeskakują... ale i to da się poprawić.


Ulepszamy zegar
Tego przykładu już nie będę tłumaczył, pobawcie się sami w jego modyfikowanie, porównajcie z poprzednim i zobaczcie różnice. Wadą tego zegara jest to że ma czasami do jednej sekundy opóźnienia w stosunku do czasu prawdziwego. Dzieje się tak dla tego, że od czasu włączenia zegarka do minięcia następnej sekundy czasami mija 5 setnych, czasem aż 100 i sprawdzenie w którym akurat jesteśmy momencie wymagało by jeszcze sporo linijek kodu.
W create dajemy:
gml:
sec=current_second;

A w draw
gml:
if sec>60 then sec-=60;

sekx=320+sekl*cos(degtorad(sec*6-90));
seky=240+sekl*sin(degtorad(sec*6-90));
minx=320+minl*cos(degtorad((current_minute+(current_second/60))*6-90));
miny=240+minl*sin(degtorad((current_minute+(current_second/60))*6-90));
godzx=320+godzl*cos(degtorad((current_hour+(current_minute/60))*30-90));
godzy=240+godzl*sin(degtorad((current_hour+(current_minute/60))*30-90));


draw_arrow(320,240,sekx,seky,10);
draw_arrow(320,240,minx,miny,10);
draw_arrow(320,240,godzx,godzy,10);

for (i=0; i<360; i+=30)
{
var l1,l2,l3,l4;
l1=320+90*cos(degtorad(i-90));
l2=240+90*sin(degtorad(i-90));
l3=320+100*cos(degtorad(i-90));
l4=240+100*sin(degtorad(i-90));

draw_line(l1,l2,l3,l4);
}

Pętla for dodatkowo namaluje nam 12 kresek na zegarku.

Mam nadzieję, że dzięki temu przykładowi poznacie kilka ciekawych technik programowania, jak płynne przesuwanie obiektu i obliczanie pozycji na podstawie innych danych.
głosów: 5 | ocena: 6.00 oceń zasób | dodał: gnysek
Komentarze
stron: 21

2


(21:01, 3.09.2008)

hej mi nie działa!

(21:03, 3.09.2008)

Pomoże ktoś?pls

av

gnysek (21:09, 3.09.2008)

napisz na forum, to raz, a dwa - co nie działa ?

(21:26, 8.09.2008)

pokazuje że błąd jest w kodzie:draw_circle(320,240,100,true);

kryniak (21:39, 8.09.2008)

A treść błędu? :*

av

Gunman (12:08, 31.01.2010)

Dobra, nie chce mi się liczyć. Ponad 100 błędów wyłapało jak uruchomiłem .exe

stron: 21

2



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

Nie masz konta? Zarejestruj się
Użytkownicy on-line
69 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 67, userów: 2, ukrytych: 0
Gibki Kaktus, Herberttig

0 użytkownik(ów) na gmczacie i 0 bot(ów)
Shoutbox
Threef (18:25, 15.01.17):
No to wygląda jakby twoje "mouse" miało duplikat nazwy.
Ignatus (17:52, 15.01.17):
Threef-juz znalazlem o co chodzi ale logiki tu nie ma.Krzaczyl kod if mouse.x!=mouse.xprevious" po usunieciu tego wszystko dziala.Problem polega ze jedyne co zmienialem to podmienialem grafiki, w ogole kodu nie ruszalem i nagle zaczelo swirowac
I am vader (16:24, 15.01.17):
W warnlogu masz ze to za ten link
Nikas (12:23, 15.01.17):
Ej no serio to za ten obrazek i link do nakidmag? Lel
gnysek (12:05, 15.01.17):
polecam screeny i trailery na almora.pl
gnysek (12:05, 15.01.17):
@Wojo: ale nikt o online nie mówi, a na androidzie masz całkiem niezłą Almorę, a następny update pobije wszystko co do tej pory było
Threef (11:02, 15.01.17):
Ignatus cache wyczyszczony? Obiekt w Room jest?
Adriann (22:58, 14.01.17):
aww to: i.imgur.com/mT8i8.gif
I am vader (22:25, 14.01.17):
O KURCZE DZISIAJ ROCZNICA MOJEJ SYGNATURY
Ignatus (22:12, 14.01.17):
Jest kod do wykonania jak w pysk strzelil-nie robi i koniec.Identyczny obiekt z identycznym kodem ale sprzed 4 dni dziala.Magia
Ignatus (22:03, 14.01.17):
Mieliscie kiedys taka zawieche GM ze przestal wykonywac kod?Wlasnie to przerabiam.Cos pieknego,4 dni w plecy
MaxGaming (20:36, 14.01.17):
To jest ten przypadek gdy użytkowników jest tak mało że moderatorzy już z nudów wykazują się nadgorliwością no i żeby ich nikt nie oskarżył że nic nie robią ale wszyscy chyba wiemy że ten ban był bez sensu xd
I am vader (17:52, 14.01.17):
Niby za 18+ Ale ja tam gora widze 16+ bo jedyne widoczne piersi sa bardziej plaskie od powierzchni lustra
Ignatus (15:11, 14.01.17):
Za co to zgraniasz Nikas?
Gibki Kaktus (14:40, 14.01.17):
A ja za 4h mam studniówkę....
Gibki Kaktus (14:37, 14.01.17):
Nie wiedziałem, że Nikas ma bana xD
Wojo (13:41, 14.01.17):
co za społeczniaki, nie dość,że forum martwe do ubijacie aktywnych userów
Nikas (13:03, 14.01.17):
No elo wracam po krótkim banie, wskoczyły mi dwa kolejne warny. Czuję dobrze niekwestionowany zwycięzca jesli chodzi o warnlog. xD
Wojo (23:39, 13.01.17):
No i szczerze niewiele osób będzie w nią grało jeśli ktokolwiek, na urządzeniach mobilnych osiągnęłaby sukces jakby była zajebiście pod nie przystosowaną mechaniką. Ale i tak szacun za pisanie czegokolwiek
I am vader (23:38, 13.01.17):
Strasznie mało głosów w CA jak na ilość osób podrzucającą nominacje
Wojo (23:38, 13.01.17):
Jak w almore przecież nikt nie gra a co dopiero myśleć o moderach
I am Lord (19:40, 13.01.17):
moderzy by takie coś wykorzystali
gnysek (16:15, 13.01.17):
W sumie, tak bardzo na siłę, to dałoby się dociągać questy z sieci przy tym systemie. Ale po co.
gnysek (16:14, 13.01.17):
Ach, właśnie kończę system scenariuszy do Almory. Teraz muszę go "upłnnić", animacje itd. Ale ogólnie działa zajebiście, szkoda, że 7 lat temu na to nie wpadłem
Korodzik (14:53, 13.01.17):
jeśli to jeszcze aktualne 34 godziny później
Korodzik (14:53, 13.01.17):
MaxGaming: pokaż, może ja dam radę
Chell (0:32, 13.01.17):
o, i AC1 za dolca
Danielus (21:05, 12.01.17):
kupiłem sobie bundla ostatnio jak spriter był i teraz unity wypuściło Anima2D : <
Fervi  (20:34, 12.01.17):
Kolejny Dirt (Showdown)
MaxGaming (4:19, 12.01.17):
Jestem kompletnym beztalenciem jeżeli chodzi o matmę. Pomógłby mi ktoś rozwiazać dwa przykłady(uczę się równań kwadratowych i tych dwóch przykładów nie rozumiem a muszę to umieć, a w necie nie ma)?
Sutikku (17:58, 11.01.17):
nie mówię, że w 2h ułożyliśmy c;
Threef (17:18, 11.01.17):
Ja wiedziałem.
gnysek (16:33, 11.01.17):
Wiedzieliście, że obj.sprite_width == image_get_width(sprite_index)*image_xscale; ??
Korodzik (11:37, 11.01.17):
zupełnie nie pamiętałem tego gościa, niemal lepszy 'profesjonalista' niż paqoo forum.gmclan.or...p?showuser=6905
Korodzik (11:36, 11.01.17):
Wow, stare tematy na gmclanie to kopalnia zabawnych topiców
gnysek (9:41, 11.01.17):
I tylko 2h? Niemożliwe.
Sutikku (20:45, 9.01.17):
ale co, ile puzzli? 1000
Ignatus (11:52, 9.01.17):
pewnie 32
PatrykPlayingPOLSKA (17:53, 8.01.17):
Ile części ?
Sutikku (17:49, 8.01.17):
tylko te gierki wam w głowie, ja właśnie układałem 2h puzzle z babcią, polecam xd
I am vader (17:12, 8.01.17):
Ja osobiście bardzo lubie 4'kę.
I am vader (17:12, 8.01.17):
Są tylko ludzie którzy uważają za 4 za lepsze od reszty i ludzie którzy uważają 4 za gorsze od reszty. Inne kombinacje są ekstremalnie rzadkie.
Gibki Kaktus (17:02, 8.01.17):
A przed game devem, to tworzyłem dodatki do Bitwy o Wesnoth
Gibki Kaktus (17:02, 8.01.17):
Również uważam HoMM 4 za słabe Ale jest tak jak wspominaliście, to zupełnie inna gra. Tak samo w życiu nie nazwę Arcanii Gothiciem, to jest hańba dla tego cudownego tytułu.
Chell (16:40, 8.01.17):
ja jestem bardzo za, ale to w przyszlym tygodniu, jak lapka odzyskam
I am Lord (15:44, 8.01.17):
serwery sa
PatrykPlayingPOLSKA (14:28, 8.01.17):
Jakieś ip na którym możemy wszyscy grać ?
I am Lord (13:35, 8.01.17):
bez kombinowania
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.01542 sekund ] [ Liczba zapytań MySQL: 16 ]

thecrims Otserv List Otserv LyricsTown Harry Potter Serwery Gier
dev nodev