Ten artykuł został stworzony dla starszych wersji GameMakera i może nie być aktualny.

Zegar analogowy

Sobota, 18 Lutego 2006, 22:44
Czas czytania 2 minuty, 56 sekund
Zgodne z GM: gm5 gm6 gm7 gm8
Dowiedz się jak poruszać obiekty po okręgu, tworząc zwykły zegar analogowy.
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.
koddraw_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.
kodvar 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:
kodsekx=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
koddraw_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:
kodsec=current_second;A w draw
kodif 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.
Komentarze (łącznie 26, wyświetlam 1 - 15):
Dark Maximal (Sob., 18 Lut. 06, 22:50)
#1

Hmm... całkiem przydatne, aczkolwiek nieskomplikowane :)

gnysek (Sob., 18 Lut. 06, 22:54)
#2

Dla niektórych to jest kosmos napewno, sam rok temu miałem z tym problem.

Tymon (Nie., 19 Lut. 06, 13:18)
#3

Gnysek narobiłeś się =D Przecież można prościej. Ok już się nie odzywam xP

p
Piotrex (Pią., 24 Lut. 06, 17:30)
#4

spoko gnysek tylko dziwnie brzmi "sekx" :P

K
~Kamilex (Pią., 24 Lut. 06, 18:11)
#5

omg.. ja sie nigdy nie polapie!!

pietrus (Pią., 24 Lut. 06, 19:18)
#6

To nie łap siebie, tylko klawiature (i ew. myszke) i pisz, pisz, PISZ!

s
~szkp (Sob., 25 Lut. 06, 12:16)
#7

A mi to nic nie wyszło z tego.

radSun (Pon., 27 Lut. 06, 21:34)
#8

Przydatne, aczkolwiek nieprzydatne. Przeciesz wszyscy nie zaczną nale robić zegarów. Prędzej gry...

Dark Maximal (Pon., 27 Lut. 06, 22:28)
#9

Ale przecież tu nie chodzi o zegar, tylko o poruszanie się obiektu po okręgu (dobrze mówię? :) ).

Tymon (Wto., 28 Lut. 06, 07:11)
#10

Hehehe...
[KOD]direction+=3;
speed=5;[/KOD]
...hehehe. Jest po okręgu.

Dark Maximal (Wto., 28 Lut. 06, 12:41)
#11

Tymon, nie po okręgu tylkow kólko :]

Tymon (śro., 01 Mar. 06, 21:10)
#12

pl.wikipedia.org/wiki/Okrąg xP Porusza się po ścieżce która jest okręgiem, nie? :D Chyba mam rację.

t
tomalas (śro., 01 Mar. 06, 21:29)
#13

Koło jest wypełnione a okrąg to same linie jeżeli o to chodzi ;P

Tymon (śro., 01 Mar. 06, 21:51)
#14

Język potoczny mnie dobija xD Czekamy na kolejne genialne przykłady prof. Gnyska (ja się nie nabijam) =]

gnysek (Pią., 03 Mar. 06, 15:55)
#15

Przykład jest dobry, czasami może się przydać do zrobienia jakiegoś konkretnego rysunku (np. zaokrąglone rogi prostokąta :P)

Najnowsze wersje GameMakera:

LTS
2026.0.0.16 • 2022.0.3.99
wydana 138 dni temu
Beta
2026.100.0.1171 •
2026.100.0.1116
•
 GMRT beta 0.22.4

wydana  5 dni temu
= IDE, = Runtime, = GMRT
Użytkownicy online
1 użytkownik aktywny:
gości: 1,
(~ostatnie 15 minut)
Discord
25 użytkowników online na discordzie:
Miłosz, 🧁Cupcake🧁, Nikas, Alice, LeD, 21Lancz, Carl-bot, Fox, p..., GibkiKaktus, Radek Ignatów, Murrri, yazaa, Dyno, szmalu, Ulti, bagno, Mtax, MrTesterr, l..., Borek, moeglich, g..., Add92, Shockah
Shoutbox
gnysek (23:05, 08.10.26)
Były takie próby, widać co z tego wyszło ;)
Kuzyn (17:06, 08.10.26)
może forum musi rozszerzyć działalność mocniej i skupiać ogólnie polski gamedev hihi
S
Sutikku (18:26, 05.10.26)
zapytaj onet zamknęło działalność, wizaz zamknęło działalność, krajobraz nie jest łatwy
Wojo (16:30, 28.09.26)
To świadczy o tym, że gmclan ma jeszcze duży potencjał, ale niestety nie jest on wykorzystywany tak jak należy.
Adriann (12:33, 28.09.26)
No włąśnie kurcze..nic tu się nie dzieje od lat a i tak wchodzę prawie coddziennie :D
Kuzyn (12:04, 19.09.26)
:] :]
gnysek (13:01, 04.09.26)
Dzięki! :D
S
Sutikku (11:08, 04.09.26)
gmclan to moje go-to żeby sprawdzić czy działa mi internet
Wojo (16:25, 03.09.26)
Pytanie tylko co z tym faktem możemy zrobić my jako użytkownicy? - przede wszystkim udzielać się więcej. Ja ogólnie lubię dużo mówić, dużo pisać, mało robić, ale poza mną obecnie jest może kilku użytkowników, którzy coś tutaj wkleją raz na ruski rok.
Wojo (09:25, 03.09.26)
Fora internetowe wyhamowały już dawno temu, ale teraz to nawet zaciągnęły ręczny. Przecież nic się na nich nie dzieje na ten moment. Trzeba czekać, aż może aktywność wróci
Starsze wpisy znajdziesz w Archiwum.
Ankieta
Ile zarobiłeś do tej pory na grach stworzonych w GM?