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


(19:01, 3.09.2008)

hej mi nie działa!

(19:03, 3.09.2008)

Pomoże ktoś?pls

av

gnysek (19:09, 3.09.2008)

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

(19:26, 8.09.2008)

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

av

kryniak (19:39, 8.09.2008)

A treść błędu? :*

av

Gunman (11: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
5 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 0, userów: 5, ukrytych: 0
Uzjel, I am vader, Chell, I am Lord, Adriann

7 użytkownik(ów) na gmczacie discord.com
Shoutbox
Pootkov (21:01, 18.08.17):
Czyli mam rozumieć, że akurat wchodzę w wielkie zmiany i 15 lat GMClanu?
gnysek (6:14, 18.08.17):
Stary stary? Nie. Ten sprzed 2-3 dni? tak, w stopce forum
Pootkov (21:57, 17.08.17):
wygląd forum
Pootkov (21:56, 17.08.17):
Da się jakoś zmienić wygląd na stary? Ten nowy razi w oczy
I am Lord (21:52, 17.08.17):
Ale nie działa system ligi więc będzie to w temacie tylko
I am Lord (21:52, 17.08.17):
Właściwie ligę moge zrobić
Pootkov (21:31, 17.08.17):
dawno tutaj nie byłem. Jak się tu wysyła PW, czy są jeszcze Ligi Weekendowe?
I am Lord (16:41, 17.08.17):
Powiadomienia powinny być jakoś zintegrowane ze stroną główną
Penguin (8:59, 17.08.17):
emot_poo.gif
I am Lord (19:22, 16.08.17):
Chell (16:19, 16.08.17):
Patryk, w shoutboxie jest inny zestaw emotek niz na forum
Chell (16:19, 16.08.17):
no nie, a juz sie nastawilem na okragly avatar
PatrykPlayingPOLSKA (15:17, 16.08.17):
:gnysek:
gnysek (14:25, 16.08.17):
emotki wróciły. No, sukces
gnysek (14:00, 16.08.17):
naprawiłem kodowanie forum kurde, a sie bawiłem już w wyświetlanie hexów
I am Lord (13:03, 15.08.17):
można w nim zrobić taki model i potem wyexportować warstwy spritów
I am Lord (13:03, 15.08.17):
Dobre do tej techniki są takie programy do trójwymiarowego pixel artu, zrobione ma potrzeby minecrafta
I am Lord (13:02, 15.08.17):
nakładanych na siebie ale przesuniętych w osi Y każda nowa warstwa
I am Lord (13:02, 15.08.17):
Takie udawane 3D modele składające się z warstw spritów
I am Lord (13:02, 15.08.17):
O kiedyś coś takiego robiłem
Ignatus (12:08, 15.08.17):
Jak sobie pomyśle że to jest zrobione w GM www.youtube.com...h?v=_BztMPC5Kk4 i porównam ze swoimi możliwościami to chce się płakać
I am Lord (9:23, 15.08.17):
Coś dziwnego mam. Jak odpalam zakładkę z gmc to jestem wylogowany ale po odświeżeniu strony jestem już zalogowany
gnysek (14:15, 14.08.17):
Early Access Preview ?
Ignatus (13:15, 14.08.17):
Co to jest to "GameMakerStudio 1.4.x EAP " ???
gnysek (17:33, 13.08.17):
Nie wiem czemu tematy się z UTF-8 nie konwertują :/
gnysek (17:31, 13.08.17):
@I am Lord - naprawione
Wojo (17:13, 13.08.17):
Cieszę się, że ktoś tu posłuchał słusznych rad
I am Lord (14:42, 13.08.17):
Oj klikniecie w link z Nowości w forum nie przenosi do nowego posta
Borek (12:18, 13.08.17):
*się starzeje
Borek (12:18, 13.08.17):
Uff.. bo już myślałem, że sięstarzeje
Threef (11:54, 13.08.17):
Skórka się zmieni. Najpierw wszystko musiało być przywrócone do życia
Borek (11:51, 13.08.17):
Forum zostanie w obecnej ( nowej ) wersji wizualnej?
Uzjel (11:33, 13.08.17):
Co tu się!
gnysek (9:48, 13.08.17):
ew. problemy zgłaszajcie na czacie discrodowym - link na górze
gnysek (9:32, 13.08.17):
Jeśli komuś nie działa, niech skasuje ciasteczka
gnysek (9:31, 13.08.17):
Witamy ponownie
Ranmus (18:25, 6.08.17):
Parę razy zaczynałem, i kończyło się na paru backendowych skryptach w gitlabie.
I am Lord (18:16, 6.08.17):
Zacząłeś nowy gmclan pisać czy skończyło się na chęciach?
I am vader (17:42, 6.08.17):
To wiele tlumaczy
Ranmus (17:40, 6.08.17):
Mogłem, ale po prostu do niedawna wierzyłem, że zrobię nową wersję. Jednak nie ma się co oszukiwać.
I am vader (17:24, 6.08.17):
Nie zrozum mnie zle, nie widze Cie tak jak Gnysek maluje, ale gmclan mogles przekazac juz jakis czas temu. I tak ciesze sie ze sie doczekalismy przekazania passów teraz a nie kiedys pozniej.
Ranmus (17:20, 6.08.17):
Niech będzie, że to ja jestem ten zły. Koniec tematu.
Ranmus (17:19, 6.08.17):
Gnysek, daj se siana, bo Ty wiesz swoje, a ja swoje. Co jakiś czas oskarżasz mnie publicznie o to i tamto, a ja nie mam ochoty prać non-stop tych brudów ponownie. Już wiele razy tłumaczyłem swoje postępowanie i odpierałem te zarzuty. Nie mam zamiaru się powtarzać.
Ranmus (17:17, 6.08.17):
Ja się po prostu sugeruję aktywnością twórczą aktualnie i tyle. Wojo - zastanowię się.
I am vader (17:13, 6.08.17):
Osobiscie nie mam zdania czy Uzjel czy Gnysek. Ale Gnysek by mi nigdy nie dal moda wiec...
I am vader (17:12, 6.08.17):
Z drugiej strony jedyny powod ze gnysek zrezygnowal to brak rozwoju dla gmclanu pod wodza Ranmy, wiec nie ma co sie dziwic ze sie wypalil a teraz znowu ma ochote.
MaxGaming (16:20, 6.08.17):
Nie oszukujmy się tu nie chodzi kto chce lepiej ale kto chce przejąć gmclan xd osobu które mówiły że nie mają czasu moderować gmclan chcą teraz od nowa go pisać jak usłyszały o tym że ramna komuś go oddać chce xd
Wojo (14:10, 6.08.17):
Gmclanowi to nie grozi
Danielus (12:51, 6.08.17):
Zwykłe fora się nie sprawdzają gdy zaczyna się pojawiać za dużo wpisów
Ankieta
» Jakiej wersji GameMakera głównie Używasz?
GameMaker: Studio 2
GameMaker: Studio
GameMaker 8.1 i starsze
Żadnej

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.01864 sekund ] [ Liczba zapytań MySQL: 13 ]

thecrims Otserv List Otserv LyricsTown Harry Potter Serwery Gier
dev nodev