Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Program analogových hodin - plynulé posouvání ručiček

Aktivity
Avatar
Robert Zemánek (bobánek):19.1.2013 19:29

Čus napadlo mě udělat si vlastní hodiny ve WPF, při spuštení programu se vygnererují čáry na základě aktuálního času. Ručičky se mi hýbají, ale hodinová se neposuvá plynule. Je-li 6.59, měla by být už na 7 a ona je stále na 6, což vypadá jako 5.59

//kolik je hodin jsem zjistil takto:
this.hours = aktualniCas.Hour;
this.minutes = aktualniCas.Minute;
this.seconds = aktualniCas.Second;
//vypočítání úhlu následovně:
uhelM = minutes * 360 / 60;
uhelS = 360 / 60 * seconds;
uhelH = (hours * (360 / 12));//tady už je chyba
//vykreslení - to by mělo být snad v pořádku
DoubleAnimation aniS = new DoubleAnimation(uhelS, uhelS + 360, new Duration(TimeSpan.FromSeconds(60)));
DoubleAnimation aniM = new DoubleAnimation(uhelM, uhelM - 6, new Duration(TimeSpan.FromSeconds(3600)));
DoubleAnimation aniH = new DoubleAnimation(uhelH, uhelH -30, new Duration(TimeSpan.FromSeconds(43200)));

Otázka zní? Jak spočítat úhel hodin, aby se hodinová ručička otáčela průběžně?? díky moc :-)

Odpovědět
19.1.2013 19:29
Jsem jako holub.
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Robert Zemánek (bobánek)
David Hartinger:19.1.2013 19:36

Vypadá to, že dělíš celočíselně. Potřebuješ dělit tak, aby ti vyšlo reálné číslo, tedy třeba 6.5. Hodinová ručička bude pak mezi 6 a 7 ;)

Nahoru Odpovědět
19.1.2013 19:36
You are the greatest project you will ever work on.
Avatar
Robert Zemánek (bobánek):19.1.2013 19:39

ted už mi došlo že když je 3:20 tak hodiny budou 3.3

Nahoru Odpovědět
19.1.2013 19:39
Jsem jako holub.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Robert Zemánek (bobánek)
matesax:19.1.2013 19:40

Já bych šel do XNA a nakreslil si to celé sám... I když WPF není ani omylem špatně.

this.hours
this.minutes
this.seconds

Proč je tam this? A vůbec - použij existující strukturu. Nejlépe DateTime...

Nevidím ale důvod, nač si tyto údaje ukládat. Normálně bych pracoval s DateTime.Now... Tak jako tady:

http://www.codeproject.com/…Clock-in-WPF

Jen se mi ten kód také úplně nezamlouvá - ale když to nebudeš jen kopírovat...

Počty zde:

secondHand.Angle = DateTime.Now.Second * 6;
minuteHand.Angle = DateTime.Now.Minute * 6;
hourHand.Angle = (DateTime.Now.Hour * 30) + (DateTime.Now.Minute * 0.5);
Editováno 19.1.2013 19:42
 
Nahoru Odpovědět
19.1.2013 19:40
Avatar
Odpovídá na matesax
Robert Zemánek (bobánek):19.1.2013 19:50

tak už to vypadá slibně

//tohle se jeví dobře nebo ne?
DoubleAnimation aniS = new DoubleAnimation(uhelS, uhelS + 360, new Duration(TimeSpan.FromSeconds(60)));
DoubleAnimation aniM = new DoubleAnimation(uhelM, uhelM - 6, new Duration(TimeSpan.FromSeconds(3600)));
DoubleAnimation aniH = new DoubleAnimation(uhelH, uhelH -30, new Duration(TimeSpan.FromSeconds(43200)));

jinak toto: "hourHand.Angle = (DateTime.Now.Hour * 30) + (DateTime.Now­.Minute * 0.5);" - nějaké vystvětlení?? :D

Editováno 19.1.2013 19:54
Nahoru Odpovědět
19.1.2013 19:50
Jsem jako holub.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Robert Zemánek (bobánek)
matesax:19.1.2013 19:52

Prohlédni si, co jsem ti poslal... Trochu to jejich upravit a bude to dokonalé... Já bych to hlavně neviděl jako 3 různé animace. Nýbrž jako jednu, se 3 parametry - úhly...

A přesně jak je to tam - ručička je objekt - a tak se dá nastavovat. Nakonec by jsi ji mohl dát nastavit i obrázek... Takže si pohraj s objektovým návrhem - nezapomínej, co je C# zač...

Edit:

Musíš si stáhnout zdroják - na webu je jen ukázka - ve zdrojáku je vše...

Editováno 19.1.2013 19:55
 
Nahoru Odpovědět
19.1.2013 19:52
Avatar
Robert Zemánek (bobánek):19.1.2013 20:10

něco jsem pochytil, ale mají tam timer

Nahoru Odpovědět
19.1.2013 20:10
Jsem jako holub.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Robert Zemánek (bobánek)
matesax:19.1.2013 20:14

A jak jinak asi?

 
Nahoru Odpovědět
19.1.2013 20:14
Avatar
Robert Zemánek (bobánek):19.1.2013 20:19

tak dělal jsem to přes animaci, což by mělo jít

Nahoru Odpovědět
19.1.2013 20:19
Jsem jako holub.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Robert Zemánek (bobánek)
matesax:19.1.2013 20:25

Tady jde o to, aby byly přesné... Takže to chce Timer na 10ms.

 
Nahoru Odpovědět
19.1.2013 20:25
Avatar
Robert Zemánek (bobánek):19.1.2013 20:27

nějak to zkusím, dík :)

Nahoru Odpovědět
19.1.2013 20:27
Jsem jako holub.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.