Kirjoittaja
|
Aihe: Laskuri toimii äärimmäisen ailahtelevasti (Luettu 341 kertaa) |
|
Veli-Veli
Uusio

Kirjoituksia: 2

En editoi profiiliani loppuun!
|
Kyseessä on laskuri joka näyttää kuinka monta päivää, tuntia, minuuttia ja sekuntia on tiettyyn päivämäärään. Ja ongelman ydin on siis, että sen toiminta ei ole missään määrin vakaata: Aluksi toimi ihan oikein ja hyvin, mutta sitten yhtäkkiä alkaakin laskemaan minuutteja ja tuntejakin yhtä nopeasti kuin sekunteja ja lisää vielä ylimääräisen nollankin, koodin kuuluukin lisätä yksi nolla kun luvussa on vähemmän kuin kaksi merkkiä, mutta 3 merkkiä. Välillä näyttää siltä, että laskuri sekoaisi keskiyöllä tai millon vain kun kello on kymmentävaille tasan ja toisinaan taas sitten ei välitä mitään.
En ole flash-ammattilainen tai ohjelmoija, joten koodi on saatu tutoriaalista. Hain googlesta "as3 countdown" ja kävin läpi kaikki mitkä löysin, eikä koodeissa juuri eroja ollut, joten olen täysin hukassa.
Alla on tämän hetkinen koodi
Erittäin kiitollisena otan vastaan kaikki vastaukset, oli ne sitten vastaavia kokemuksia, ratkaisuja, arvauksia tms.
var endDate:Date = new Date(2009,11,7); var countdownTimer:Timer = new Timer(1000);
countdownTimer.addEventListener(TimerEvent.TIMER, updateTime); countdownTimer.start();
function updateTime(e:TimerEvent):void { var now:Date = new Date(); var timeLeft:Number = endDate.getTime() - now.getTime(); var seconds:Number = Math.floor(timeLeft / 1000); var minutes:Number = Math.floor(seconds / 60); var hours:Number = Math.floor(minutes / 60); var days:Number = Math.floor(hours / 24);
seconds %= 60; minutes %= 60; hours %= 24;
var sec:String = seconds.toString(); var min:String = minutes.toString(); var hrs:String = hours.toString(); var d:String = days.toString();
if (sec.length < 2) { sec = "0" + sec; }
if (min.length < 2) { min = "0" + min; }
if (hrs.length < 2) { hrs = "0" + hrs; }
var time:String = d + ":" + hrs + ":" + min + ":" + sec;
time_txt.text = time; }
|
| « Viimeisin muokkaus: Joulukuu 2nd, 2009, 12:36pm Veli-Veli » |
|
|
|
|
Juha
Hypnoosissa
   
Kirjoituksia: 423

WWW |
|
Kokeilin koodia ja hyvin tuntui pelaavan, olen itsekin käyttänyt vastaavantyyppistä tapaa laskea aikaa. Niin oudolta kuin saattaa kuulostaakin, mutta voisiko syynä olla käyttöjärjestelmästä tuleva satunnaisesti väärä aikatieto?
Yksi vaihtoehto voisi olla kysyä aika vain kerran (alussa) ja lisätä siihen aina yksi sekunti. Eli voisit kokeilla seuraavaa:
var now:Date = new Date(); var endDate:Date = new Date(2009,11,7); var countdownTimer:Timer = new Timer(1000);
countdownTimer.addEventListener(TimerEvent.TIMER, updateTime); countdownTimer.start();
function updateTime(e:TimerEvent):void { now.seconds++; var timeLeft:Number = endDate.getTime() - now.getTime(); var seconds:Number = Math.floor(timeLeft / 1000); var minutes:Number = Math.floor(seconds / 60); var hours:Number = Math.floor(minutes / 60); var days:Number = Math.floor(hours / 24);
seconds %= 60; minutes %= 60; hours %= 24;
var sec:String = seconds.toString(); var min:String = minutes.toString(); var hrs:String = hours.toString(); var d:String = days.toString();
if (sec.length < 2) { sec = "0" + sec; }
if (min.length < 2) { min = "0" + min; }
if (hrs.length < 2) { hrs = "0" + hrs; }
var time:String = d + ":" + hrs + ":" + min + ":" + sec;
time_txt.text = time; }
Kannattaa lukaista tämä artikkeli läpi, antaa mun mielestä aika kattavasti infoa: http://www.zorked.com/flash/as3-date/
|
| « Viimeisin muokkaus: Joulukuu 3rd, 2009, 10:38am Juha » |
|
http://pakastin.fi
|
|
|
Veli-Veli
Uusio

Kirjoituksia: 2

En editoi profiiliani loppuun!
|
Kiitos ja kumarrus vastauksesta ja linkistä.
Katselin läpi vanhempia versioitani ja huomasin erona ainoastaan sen, että olin antanut päivämäärän tunnin tarkkuudella, minkä mielestäni pitikin olla mahdollista ja tuo artikkelikin sen vahvistaa. Tänään on tosin toiminut moitteetta, ainakin silloin kuin olen vilkaissut, joten voisin uskoa, että vika saattoi olla käyttiksen kellossakin...
Tuo siun vaihtoehto vaikuttaisi kuitenkin paremmalta. Luulenpa, että jatkossa suosin sitä. Joskopa se olisi vähän kevyempikin kun sen ei tarvitse koko aikaa tarkistaa aikaa kellosta.
|
|
|
|
|
A-E
Uusio

Kirjoituksia: 6

En editoi profiiliani loppuun!
|
En ole varma, mutta eikö tossa pitäisi olla päivällekkin löydetty arvo. Eli montako päivää on kuukaudessa days %= 30; Mutta sitten tulee tilannen, kun on kuukausia joissa on 31-28 päivää Tämä ei varmaan korjaa vikaa
|
|
|
|
|
Juha
Hypnoosissa
   
Kirjoituksia: 423

WWW |
|
On se siellä: var days:Number = Math.floor(hours / 24);
Eikä tarvitse vähentää isomman arvon tasaluvusta, koska se on halutuista kaikkein isoin arvo..
|
| « Viimeisin muokkaus: Joulukuu 4th, 2009, 3:25pm Juha » |
|
http://pakastin.fi
|
|
|
|