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
98 użytkownik(ów) aktywny(ch) przez ostatnie 15 minut:
gości: 96, userów: 2, ukrytych: 0
PatrykPlayingPOLSKA, lew_leo

0 użytkownik(ów) na gmczacie i 0 bot(ów)
Shoutbox
Exigo (10:23, 22.02.17):
PIONA.
I am Lord (22:58, 21.02.17):
oooo w dooma grywasz, przybij pionę
Exigo (22:10, 21.02.17):
O, nie wiedziałem że jest grupa GMC na Steamie. Dołączyłem.
I am Lord (21:48, 21.02.17):
będzie jedna osoba to też wygra
Sutikku (20:52, 21.02.17):
nagrody dla najlepszych trzech miejsc. Czyli jednak obstawiamy, że będzie więcej niż trzy prace xd
Uzjel (20:34, 21.02.17):
Dzięki Zachęcam do dołączenia steamcommunity....groups/GMPolska
I am Lord (20:27, 21.02.17):
ale nei zdąrzyłem kliknąć, szybko się schowało
I am Lord (20:26, 21.02.17):
właśnie też mi wyskoczyło jak grałem
Chell (20:24, 21.02.17):
swietny pomysl z powiadomieniem na steamie
Uzjel (20:22, 21.02.17):
W piątek liga z nagrodami
ΨΧΞ (17:44, 21.02.17):
plus: ja mam 8, nie 10
ΨΧΞ (17:44, 21.02.17):
żeby przypadkowo nie łapał inputu - jak chcę searcha zrobić, to klikam klawisz Windy i wpisuje czego chce - bang ;>
Danielus (14:35, 21.02.17):
@yxe jak można mieć wyłączonego searchbara? Najlepszy feature jaki win 10 ma do zaoferowania :f
I am vader (10:26, 21.02.17):
Zapewne oba. ale DS'y są zajebiste
Wojo (10:24, 21.02.17):
albo coś bierzecie albo to przejaw głębokiej deprseji
gnysek (10:21, 21.02.17):
<rap>Używam ds_listy, jestem zajebisty, aha aha... bum tsss tss, bum tss tss </rap>
Wojo (10:02, 21.02.17):
aha to spoks
ΨΧΞ (10:00, 21.02.17):
to nie samo menu, tam pod spodem działa podstawa komunikacji z serwerem (obsługa sklepu części, kont użytkowników, sesje) - nim zrobię kolejną część flow klienta, musze dopisać ficzur też po stronie backendu, dlatego więcej póki co dzieje się po tej niewidocznej stronie zwanej serwerem
Wojo (9:57, 21.02.17):
Czyli ma to działać na zasadzie podobnej jak colobot. No ciekawe ale czy po kilkunastu latach programowania chwalenie się menu jest trochę nie na miejscu ?
ΨΧΞ (2:30, 21.02.17):
po udanym teście symulacji maszyn przyszedł czas na początki prototypu RoboCodera www.youtube.com...h?v=9Avjxh6SV6o
Threef (18:01, 20.02.17):
Andro...co? Torment za tydzień!
Ignatus (20:31, 19.02.17):
Nie ma średnio,zasuwać trzeba ostro
ANtY (16:12, 19.02.17):
no tak srednio z ta silka
Chell (13:14, 19.02.17):
w marcu to wychodzi andromeda
Wojo (13:03, 19.02.17):
dawajcie na siłkę od marca
I am vader (15:33, 18.02.17):
Ale ten, zle sprawdzilem, to byl 2014
I am vader (15:32, 18.02.17):
To forum jest za małe na nas dwóch! Przygotuj się na pojedynek.
I am Lord (15:31, 18.02.17):
Mistrz może być tylko 1
I am vader (15:20, 18.02.17):
Skoro IamLord ma Mistrz ligi 2013 czemu nie mam Mistrz Ligi 2015? Było w tamtym roku bardzo dużo tur! Obiecaliście nawet nagrody za tamten rok, ale nie było żadnych, to chociaż dopisek mile widziany
I am vader (18:51, 17.02.17):
Nie podjąłem
Wojo (9:56, 17.02.17):
Jaką decyzję podjoles Vader,?
Chell (21:59, 16.02.17):
yup
Threef (21:36, 16.02.17):
Maciek?
Chell (21:13, 16.02.17):
update, gosc ktorego mialem za Exigo to brat Sosa
I am vader (20:38, 16.02.17):
Ah te decyzje..
I am Lord (18:48, 16.02.17):
no a pozostałe środowiska z dobrym 3D mają niewygodne licencje więc nikt na nich nie robi
Wojo (18:39, 16.02.17):
jest popularne bo brakuje dobrych narzędzi do tworzenia gier, a unity jako jedno z nielicznych oferuje jako-taką obsługę 3d
Wojo (18:38, 16.02.17):
vader każdy dev w unity robi syf bo unity to syf jeśli chodzi o 3D
ΨΧΞ (18:16, 16.02.17):
ja bym powiedzial, ze najwiekszym szitem z unity jest system pluginow, jak i sama jakosc pluginow
ΨΧΞ (18:14, 16.02.17):
unity ssie? tak. ale nie ma tak znowu strasznej wydajnosci - wlasciwie to z silnikow 3D plasuje sie na trzecim, czy czwartym miejscu - wbrew temu, co devi lubia mowic to wiekszosc problemow z wydajnoscia gier tworzonych w unity pochodzi od gunwo kodu devów.
I am vader (16:47, 16.02.17):
I tak, wiem ze Antek uzywa unity, ale chodzi mi tu o 2d vs 3d.
I am vader (16:46, 16.02.17):
Gry 3D wydaja nam sie lepsze, ale to 2D otwiera bramy malym devom. Zauwaz ze kazdy maly dev robiacy w Unity 3D robi syf, bo ani gameplay ani grafika nie sa dobre. A w 2D mozna odwalac takie cuda jak ANtY
Wojo (16:01, 16.02.17):
jakby gm miał jakieś ludzkie wspieranie 3d to by wyparł te unity
Wojo (16:00, 16.02.17):
jakim cudem coś takiego ma prawo bytu ? przeciez to ma zerową wydajność
Wojo (16:00, 16.02.17):
ale unity jest badziewne
Sutikku (23:52, 15.02.17):
to super, dobrze że zasnąłem i nie zacząłem jej robić, żeby nie było xd
Uzjel (23:44, 15.02.17):
A to się nie wyklucza
Sutikku (23:28, 15.02.17):
a ja już miałem pomysł na walentynkową grę
Adriann (23:27, 15.02.17):
jak nagrodą będą czekoladki to kcę
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.0252 sekund ] [ Liczba zapytań MySQL: 16 ]

thecrims Otserv List Otserv LyricsTown Harry Potter Serwery Gier
dev nodev