Ihme hämärä ongelma coolbasicissa!?
Ihme hämärä ongelma coolbasicissa!?
Tämä sama ongelma on ollut siitä asti kun coolbasiccia rupesin harjoitteleen mutta ikään ei ole tullut kysyttyä voisiko joku ratkaista ongelman.
Kun teen pelin ja asetan framelimitin peli saattaa ihan satunnaisesti jumittaa kunnes taas painan hiirellä "pelin ikkunaa" jolloin peli taas jatkuu ihan kuin mitään ei olisi tapahtunut. Jos framelimittiä ei käytä ongelmaa ei tunnu tulevan juuri koskaan? Mitä ihmettä? Onko tähän mitään apua vai onko tuo vain bugi minkä kanssa pitää elää? Käyttis on win 7 premium 64 bit.
Kun teen pelin ja asetan framelimitin peli saattaa ihan satunnaisesti jumittaa kunnes taas painan hiirellä "pelin ikkunaa" jolloin peli taas jatkuu ihan kuin mitään ei olisi tapahtunut. Jos framelimittiä ei käytä ongelmaa ei tunnu tulevan juuri koskaan? Mitä ihmettä? Onko tähän mitään apua vai onko tuo vain bugi minkä kanssa pitää elää? Käyttis on win 7 premium 64 bit.
Re: Ihme hämärä ongelma coolbasicissa!?
Minun tietääkseni coolbasic-ohjelmat menevät pauselle jos ikkuna ei ole aktiivinen.
Re: Ihme hämärä ongelma coolbasicissa!?
Tosiaan passiivinen ikkunahan deaktivoi ohjelman. Ehkä joku toinen ohjelma yrittää ns. tulla cb:ä koodatun ohjelman eteen?
Solar Eclipse
We're in a simulation, and God is trying to debug us.
Re: Ihme hämärä ongelma coolbasicissa!?
Asia selkeä. Toinen arveluttava asia on se miksi ruudussa liikkuva objekti pätkäisee joka sekunti hieman kun käyttää framelimittiä. Ilman limittiä liikkuu sulavasti mutta jos rajoitan liikettä tapahtuu kerran sekunnissa pieni nykähdys objektien liikkeissä mikäli niitä ohjataan painamalla nappia. Voisiko tuo johtua itseasiassa näppäimistöstä vai onko kyse ohjelmasta? Onko muilla tuota probleemaa?
Re: Ihme hämärä ongelma coolbasicissa!?
Framelimit on liian pieni peliisi.
Re: Ihme hämärä ongelma coolbasicissa!?
Korjaa jos olen väärässä mutta eikö ole täysin turhaa laittaa framelimitti yli 60 mikäli näytön toistotaajuus on 60 hertsiä? Tässä uskossa olen itse ollut mutta se ei siis pidä paikkaansa?
Re: Ihme hämärä ongelma coolbasicissa!?
No riippuu onko vsync päällä, yleensä se on. Joten kyllä se on turhaa. Mutta älä oleta kuitenkaan, että kaikilla on vsync päällä tai että näytön virkistystaajuus on 60Hz.mikkois wrote:Korjaa jos olen väärässä mutta eikö ole täysin turhaa laittaa framelimitti yli 60 mikäli näytön toistotaajuus on 60 hertsiä? Tässä uskossa olen itse ollut mutta se ei siis pidä paikkaansa?
Re: Ihme hämärä ongelma coolbasicissa!?
07 (ainakin mull =D) pyörittää pelejä ilman framelimittiä 60-340, mutta perus on 65.
Re: Ihme hämärä ongelma coolbasicissa!?
Yleensähän framelimit rajoittaa myös pelimoottorin päivitystä, joten joissain tapauksissamikkois wrote:Korjaa jos olen väärässä mutta eikö ole täysin turhaa laittaa framelimitti yli 60 mikäli näytön toistotaajuus on 60 hertsiä? Tässä uskossa olen itse ollut mutta se ei siis pidä paikkaansa?
suuremmasta FPS:stä on vain hyötyä. Minusta kannattaa laittaa kaikki tapahtumaan suhteessa
aikaan, niin FPS:llä ei ole väliä. (kunhan se on jotenkin pelattavissa lukemissa)
Re: Ihme hämärä ongelma coolbasicissa!?
Hmm... Tuo kuulostaa todella hyvältä! Mitenkäs tuo olisi järkevä toteuttaa? Pelissä ei periaatteessa tarvisi olla mitään framelimittiä olemassakaan jos homma noin toteutettaisiin. Asia vaatii paneutumista.Latexi95 wrote: Minusta kannattaa laittaa kaikki tapahtumaan suhteessa
aikaan, niin FPS:llä ei ole väliä. (kunhan se on jotenkin pelattavissa lukemissa)
-
- Moderator
- Posts: 227
- Joined: Wed Aug 29, 2007 3:55 pm
Re: Ihme hämärä ongelma coolbasicissa!?
Minusta framelimittiä ei kuulu käyttää lainkaan. Se vaan aiheuttaa pätkimistä. Vakionopeus saavutetaan mittaamalla frameen kuluva aika ja jakamalla sillä haluttu matka tuhannessa sekunnissa.
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: Ihme hämärä ongelma coolbasicissa!?
Tämä on yleensä se paras tapa, luodaan siis nopeuskerroin joka määrittää liikkeiden suuruuden. Tämä voi joskus aiheuttaa liian suurta hyppimistä, ja etenkin fysiikkaa sisältävissä ohjelmissa kannatan itse enemmän systeemiä, jossa itse pelimekaniikka päivitetään n kertaa sekunnissa ja piirretään niin usein kuin kone kestää. Jos oikein fiini haluaa olla, piirron voi vielä interpoloida, mutta se ei CB:llä ole yleensä kovinkaan tarpeellista tahi helppoa.atomimalli wrote:Minusta framelimittiä ei kuulu käyttää lainkaan. Se vaan aiheuttaa pätkimistä. Vakionopeus saavutetaan mittaamalla frameen kuluva aika ja jakamalla sillä haluttu matka tuhannessa sekunnissa.
-
- Moderator
- Posts: 227
- Joined: Wed Aug 29, 2007 3:55 pm
Re: Ihme hämärä ongelma coolbasicissa!?
Totta. Pelkkä nopeuskerroin ei aina ratkaise kaikkea mutta riittää useinmiten. Painovoiman kanssa tulee ongelmia kun fps laskee alle 10. Silloin pompun korkeus alkaa vääristyä merkittävästi. Minä ratkaisin sen lennättämällä ukkoa paraabelia pitkin ajan funktiona mutta koodaajan ratkaisu on käytännössä yhtä hyvä Ja ehdottomasti parempi kun tekijöitä tulee useampi koska niitä fysiikoita ei voi yksinkertaisemmin ja tarkemmin ratkaista ilman kvanttitietokoneita. Ja tietysti se on myös oiva ratkaisu randomeihin seinän läpi puskemisiin.
Re: Ihme hämärä ongelma coolbasicissa!?
Tämä ongelma nyt ei häviä ja tuntuu pilaavan kaiken. Teen peliä missä on paljon liikkuvia objekteja ja tätä tapahtuu jatkuvasti. Mitään ohjelmaa ei pomppaa päälle minkä vuoksi coolbasic jäisi taka-alalle ja menisi pauselle mutta peli jumiutuu silti!mikkois wrote:peli saattaa ihan satunnaisesti jumittaa kunnes taas painan hiirellä "pelin ikkunaa" jolloin peli taas jatkuu ihan kuin mitään ei olisi tapahtunut.
En voi käsittää mikä on kyseessä. Eikö muilla oikeasti ole tätä ongelmaa? Edellisellä koneellani coolbasic teki juuri samaa juttua. Mikä tähän auttaa?
Re: Ihme hämärä ongelma coolbasicissa!?
Voithan tietysti kokeilla cbFUNista löytyvää funktiota, joka pitää jonkin ikkunan aina päällimmäisenä. En tiedä, toimisiko, mutta saattaisi ainakin.
Re: Ihme hämärä ongelma coolbasicissa!?
Olikos tämä erikseen ladattava paketti mikä asennettiin coolbasicciin jolloin saatiin lisää toimivuutta? Voiko tämä olla käyttöjärjestelmästä kiinni? Onko vika windows 7:ssa?
Re: Ihme hämärä ongelma coolbasicissa!?
Ja toinen lainaus "Vakionopeus saavutetaan mittaamalla frameen kuluva aika ja jakamalla sillä haluttu matka tuhannessa sekunnissa."Latexi95 wrote: Minusta kannattaa laittaa kaikki tapahtumaan suhteessa
aikaan, niin FPS:llä ei ole väliä. (kunhan se on jotenkin pelattavissa lukemissa)
Framelimitistä luopuminen lopettaa jumittamisen mutta nyt pitäisi toteuttaa tämä parempi keino että peli ei pyöri liian nopeasti. Miten ihmeessä tämä tehdään? Onko olemassa jotain tiettyä kohtaa mitä mun kannattaisi katsoa että pääsisin jyvälle ja saisin toteutettua tuon? Ymmärrän ettei täällä kukaan halua valmista koodiriviä antaa mullä nopeus rajoitetaan ilman framelimittiä mutta antakaa neuvo että pääsen oikeille raiteille.
Re: Ihme hämärä ongelma coolbasicissa!?
JEBOU!!!!
Ongelma ratkesi ja nyt on taas hieno jatkaa!
Ongelma ratkesi ja nyt on taas hieno jatkaa!
Re: Ihme hämärä ongelma coolbasicissa!?
No koska kulutin hieman aikaani tämän kirjoittamiseen, postaan sen silti, vaikka saitkin ratkaistua. Ehkä opit tästä jotain, jos jaksat lukea .
Tässä on koodi joka näyttää miten asia tehdään, ja selittää varsin kattavasti miksi se tehdään näin. Muista lukea kommentit järjestyksessä: (1), (2), (3), jne, eli ei vain ylhäältä alas. Huomaa, että tietyt muuttujat ovat liukulukuja. Tätä ei saa aikaiseksi pelkkiä kokonaislukuja käyttämällä.
Yleensä vakionopeus tehdään käyttämällä funktioita. Esim. cbSDK:ssa taitaa olla vakionopeus-funktiot, mutta älä käytä niitä ennen kuin todella ymmärrät miten se toimii. Jos ymmärrät tuon täysin, pystyt helposti luomaan myös itse omat funktiot tähän tarkoitukseen.
Jos tämä ohjelma jumittaa sinulla, poista kohdat joissa käytetään Framelimit-komentoa. Et näe miten framelimitin muutos vaikuttaa ohjelman suoritukseen, mutta perusasiat pätevät silti.
Tässä on koodi joka näyttää miten asia tehdään, ja selittää varsin kattavasti miksi se tehdään näin. Muista lukea kommentit järjestyksessä: (1), (2), (3), jne, eli ei vain ylhäältä alas. Huomaa, että tietyt muuttujat ovat liukulukuja. Tätä ei saa aikaiseksi pelkkiä kokonaislukuja käyttämällä.
Yleensä vakionopeus tehdään käyttämällä funktioita. Esim. cbSDK:ssa taitaa olla vakionopeus-funktiot, mutta älä käytä niitä ennen kuin todella ymmärrät miten se toimii. Jos ymmärrät tuon täysin, pystyt helposti luomaan myös itse omat funktiot tähän tarkoitukseen.
Jos tämä ohjelma jumittaa sinulla, poista kohdat joissa käytetään Framelimit-komentoa. Et näe miten framelimitin muutos vaikuttaa ohjelman suoritukseen, mutta perusasiat pätevät silti.
Code: Select all
//Kun ohjelma on mennyt kohdasta Repeat kohtaan Forever, on kulunut yksi frame. Lue kommentit järjestyksessä:
//(1), (2), jne.
fLimit = 60
FrameLimit fLimit
//(5) Tämä on tärkeä muistaa. Meidän täytyy päivittää edellinen_aika kerran jo ennen itse silmukkaa. Muussa
//tapauksessa kohdan (2) laskutoimitus olisi: aika_kulunut_framessa = ( Timer() - 0 ) / 1000, eli erittäin suuri
//luku. Jos unohdamme tämän, hyppäävät kaikki ohjelman liikuteltavat objektit mahdollisesti tuhansia
//pikseleitä ensimmäisen framen aikana, ja rupeavat liikkumaan oikealla nopeudella vasta seuraavalla framella.
edellinen_aika# = Timer()
Repeat
//(2) kun ohjelma on mennyt ainakin yhden kierroksen, on meillä jokin nollasta poikkeava luku muuttujassa
//edellinen_aika. "Edellinen aika" otettiin tavallaan heti kun silmukka alkoi (kohta 1). Nyt, kun pääsemme tähän kohtaan,
//(kierrettyämme yhden kierroksen), on aikaa kulunut vähäsen. Timer()-funktion arvo on muuttunut (kasvanut).
//Saamme frameen kuluneen ajan miinustamalla Timer()-arvosta edellisen ajan. Aika on millisekunneissa, joten
//jaamme sen tuhannella saadaksemme ajan sekunneissa.
aika_kulunut_framessa# = ( Timer() - edellinen_aika ) / 1000
//(1) otetaan ylös koneen sisäisen laskurin arvo. Tämä arvo nousee tuhannella
//sekunnissa, ja se saadaan kutsumalla funktiota Timer().
edellinen_aika = Timer()
//Tässä on vain jotain tietoja boksin piirtämistä varten. Amplitudi kertoo kuinka pitkälle boksi heilahtaa per puoli.
keskiX = ScreenWidth() / 2
keskiY = ScreenHeight() / 2
amplitudi = 100
//(3) Meillä on nyt pieni desimaaliluku muuttujassa aika_kulunut_framessa. Saamme nopeuden kertomalla
//jokin vakioluku (suurempi = nopeampi) muuttujalla aika_kulunut_framessa. Jos vakioluku on 200, ja yhteen
//frameen menee tasan sekunti (aika_kulunut_framessa = 1), niin nopeus = 200 (pikseliä sekunnissa). Jos
//suoritus vähän nopeutuu tästä, ja yhteen frameen meneekin vain puoli sekuntia, nopeus = 0.5 * 200 = 100
//(pikseliä puolessa sekunnissa, eli taas se 200 pikseliä sekunnissa). Mitä pienempi aika_kulunut_framessa,
//eli mitä nopeampi suoritus, sitä vähemmän laatikkoa siirretään framen aikana. Lopputuloksena laatikko
//siirtyy aina vakiopikselimäärän tietyssä ajassa. Tässä tapauksessa 200 pikseliä sekunnissa.
nopeus# = aika_kulunut_framessa * 200
//(4) Lisäämme boksin "ajastinta" muuttujan arvolla nopeus. Boksin ajastin siis kasvaa vakionopeudella suhteessa aikaan.
boksin_ajastin# = boksin_ajastin + nopeus
//piirrämme boksin heilahtamaan siniaallon mukaisesti.
Box keskiX + Sin( boksin_ajastin ) * amplitudi - 20, keskiY - 20, 40, 40
fLimit = fLimit + UpKey() - DownKey()
FrameLimit fLimit
Text 20, 20, "Ylös- ja alaspäinnuolet muuttavat framelimittiä"
Text 20, 60, fLimit
DrawScreen
Forever