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
Akademia GMCLANu
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);

av

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
1 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 1, userów: 0, ukrytych: 0
Użytkownicy na czacie discord
I am vader (16:08, 16.12.17):
Ja koniec koncow nie wiem czy maja sie iskrzyc czy nie.
gnysek (14:10, 15.12.17):
o maczanach ?
Wojo (13:44, 15.12.17):
Swoją drogą jeśli jesteśmy przy temacie palenia to pamięam te wywody o maczanach, które się iskrzą
Wojo (13:43, 15.12.17):
Pierwsza rzecz jaką robię po spaleniu kuchni to napisanie o tym na gmclanie
gnysek (16:06, 14.12.17):
I już zaktualizowali GMS2 ponownie z hotfixem, bo to nowe okienko w room editorze nie działało prawidłowo...
Gibki Kaktus (12:49, 14.12.17):
Zgadnijcie kto spalił kuchnię i musial się wynieść? XD
gnysek (11:33, 14.12.17):
@Wojo - ten typek dawno sprzedał ten film i teraz robi go Disney
ANtY (9:49, 14.12.17):
szanuje
Chell (17:15, 13.12.17):
wysoka piątka
I am Lord (17:15, 13.12.17):
Nie oglądałem ani jednej części SW i jestem z tego dumny
Wojo (13:23, 13.12.17):
z resztą typek jest na tyle smutny ze musi wypuszczac co jakis czas nowa czesc swojego filmu bo nie potrafił zrobić jednego porządnego filmu
Wojo (13:22, 13.12.17):
nigdy nie ogladalem gwiezdnych wojen i jakos mnie do tego nie ciagnie
gnysek (10:32, 13.12.17):
ja wczoraj kupiłem bilet na SW na dziś, podobno 9/10
Chell (20:07, 12.12.17):
byle bez warnow
I am vader (19:52, 12.12.17):
A ja bede antychellowski i powiem, ze SW jest dobre, harry potter ok, a lotr to gówno i syf. A i SW I nie istnieje, tylko II-VI
Chell (19:51, 12.12.17):
to ja bede do bolu offstreamowy i powiem, ze SW to zawsze byla dla mnie mordega, najnudniejsze na swiecie, plus meczacy overhype. Harrego Pottera tez nie znosze, tylko LOTR
gnysek (17:06, 12.12.17):
i jeszcze zapomniałeś dodać, że zaczeło się na 4 części
Ignatus (16:49, 12.12.17):
Dałem radę wytrzymać połowę poprzedniej części, wątpie czy będzie lepiej..Będę do bólu mainstreamowy ale SW sie skoczylo na 6 episodzie tak jak obcy na 3 czeci
gnysek (16:40, 12.12.17):
na star warsy kto idzie do kina ?
gnysek (16:40, 12.12.17):
nic koleżku
ANtY (16:10, 12.12.17):
hehe co tam kolegowie
Wojo (16:49, 11.12.17):
Nie no zajebiscie jest sie starzec
Nikas (22:28, 10.12.17):
xDDDD no nieźle typy
Wojo (10:26, 10.12.17):
swoją drogą też bardzo nie lubię swoich urodzin
Wojo (10:26, 10.12.17):
Kiedyś miałem komplex dużych uszów
Wojzax (21:36, 9.12.17):
i wielkość uszu
Wojzax (21:36, 9.12.17):
wiek to tylko liczba
I am Lord (16:23, 9.12.17):
Mi o mojej osiemnastce powiedziała nauczycielka z angola
Sutikku (15:52, 9.12.17):
prosze nie straszyc za pare miesiecy mam 17
I am vader (15:17, 9.12.17):
Moje życie skończyło się po siedemnastce
exp (18:40, 8.12.17):
dwudzieste urodziny to była dla mnie trauma
Wojo (20:43, 7.12.17):
ja chyba z 9
ANtY (13:48, 6.12.17):
a ja 420 hihihihihui
gnysek (11:10, 6.12.17):
a ja 30! jestem 2x starszy niż gmclan
Morro (21:48, 5.12.17):
ja wciąż 14
I am Lord (21:29, 5.12.17):
Uzjel czemu w twoim filmie z flappy birdem przyjales taki zlo nawykowy styl pisania kodu?
PsichiX (21:15, 5.12.17):
a ja 69
Chell (20:29, 5.12.17):
(ja mam 18 jakby co)
Chell (20:29, 5.12.17):
nigdzie juz nie mozna sprawdzac wieku userow!
Adriann (22:45, 29.11.17):
Nie musisz dawać..wystarczy że postawisz serwer;3
Morro (20:52, 29.11.17):
Czyli tak jak myślałem
I am Lord (20:43, 29.11.17):
bo czat pewnie po tcp a ruch po udp :p
Sutikku (19:56, 29.11.17):
albo dopowiedz co jest nie tak, ze czat w almorce dziala spoko, ale grasz nie porusza sie po mapie?
Morro (19:41, 29.11.17):
a może zlitujesz się i wrzucisz na jakimś laptopie w tle serwer Almorki ;> ?
gnysek (19:01, 29.11.17):
mam mam, z Szczecin Games Show, aczkolwiek to nie musi być ostatnia wersja serwera.
Chell (18:44, 29.11.17):
bo nie masz
PsichiX (17:14, 29.11.17):
no to sobie pogralismy :<
gnysek (17:02, 29.11.17):
ja mam ale nie dam, bo łatwo zdekopilować
Uzjel (16:41, 29.11.17):
Nie było chyba oficjalnej apki z serwerem
Adriann (16:08, 29.11.17):
Możliwe że na...dysku starego komputera na strychu..jakieś 115km stąd
Ankieta
» Jakie kursy najchętniej widziałbyś na stronie ?
GM Studio
GM Studio 2
Godot
Construct

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!
© 2002-2017 Ranmus (ranmus.pl), © 2017 {=|=} fable_inside();

[ Czas generowania strony: 0.0169 sekund ] [ Liczba zapytań MySQL: 13 ]