Eli miten sais vaikka pelin toimimaan yhtänopeesti joka koneella niin että ei prosessorin nopeus nopeuttais sotä ohjelmaa... autopelissäkin on aika paha jos peli on tehty vaikka 750 pentiumilla ja meet pelaamaan sitä 66 pentiumilla niin mahtais hitaaks käydä.. tai sit pelaat jollain athlon XP 3400+ niin ois varmaan liian nopee.. mite on siis mahdollista saada ohjelmat toimimaan yhtä nopeasti joka koneella?
Teet varmaan vb:llä. Siihen pitää laittaa timer eli ajastin. Minulla ei kyllä ole kokemusta timerin käytöstä :(
Mutta ehkä VB:n helpistä löytyy jotain :)
[offtopic]
lainaus:
Ikä: 1913.989 vuotta
Claw, Onkohan ikäsi mennyt väärin?
[/offtopic]
Noissa Ilotulitus- ja Pomppivat planeetat-koodivinkeissä on käytetty ajastinta juuri nopeuden vakioimiseksi. Ajastin kyllä hidastaa yleensä aikalailla animaatioita.
Toinen keino on säätää liikkeen askelpituutta koneen nopeuden perusteella. Testirutiinilla tutkitaan nopeus ja sen mukaan säädetään askellusta. Hitaalla koneella alkaa liike nykiä.
ooops... en muistanut mainita että tarkotin qbasiccia..
tämä odottaa 3 kymmenystä
aika = timer do: loop until timer - aika > .3
tämä taas odottaa syncin
WAIT &H3DA, 8
Odottaminen on aina äärimmäisen huono ratkaisu jos kyseessä paljon prosessoritehoa vaativa ohjelma. Oikea ratkaisu on siis käyttää kelloa mittamaan liikkeen "määrää". Riippuu vähän fysiikasta että miten se toteutetaan.
Mutta yksinkertaisimmillaan
x = x + nopeus
muutetaan
x = x + (nopeus * kulunutaika)
Tuskimpa QB:llä tehty ohjelma paljoa prosessori tehoja kuluttaa :D vai mitä?
Kyllä sen saa kuluttaamaan. Onhan tänne tehty raytraceri QB:lle. Sen kun joku muuttaisi reaaliaikaiseksi, niin kyllä tuota Meitzin "juttua" tarvittaisiin. Vai mitä?
Hypähtänee taas aiheesta mutta eikös WINDOW käsky vähän niinkuin tee samalla tavalla kuin raytraceri?
äs en pystynyt enää muokkaamaan mutta tässä on realiaikaista raytracetusta
https://www.ohjelmointiputka.net/koodivinkit/
Joo, Meitzin kertoma tapa on hyvä, koska silloin kappaleen paikka on aina oikea piirtohetkestä riippumatta. Basiceissa senhetkinen aika kannattaa laskea Timer-funktion palauttaman arvon perusteella.
Aihe on jo aika vanha, joten et voi enää vastata siihen.