Ihme hämärä ongelma coolbasicissa!?

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
mikkois
Newcomer
Posts: 43
Joined: Wed Sep 02, 2009 1:16 am
Location: Kokkola

Ihme hämärä ongelma coolbasicissa!?

Post by mikkois »

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. :shock:
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Ihme hämärä ongelma coolbasicissa!?

Post by Awaclus »

Minun tietääkseni coolbasic-ohjelmat menevät pauselle jos ikkuna ei ole aktiivinen.
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Ihme hämärä ongelma coolbasicissa!?

Post by MaGetzUb »

Tosiaan passiivinen ikkunahan deaktivoi ohjelman. Ehkä joku toinen ohjelma yrittää ns. tulla cb:ä koodatun ohjelman eteen?
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
mikkois
Newcomer
Posts: 43
Joined: Wed Sep 02, 2009 1:16 am
Location: Kokkola

Re: Ihme hämärä ongelma coolbasicissa!?

Post by mikkois »

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?
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Ihme hämärä ongelma coolbasicissa!?

Post by legend »

Framelimit on liian pieni peliisi.
mikkois
Newcomer
Posts: 43
Joined: Wed Sep 02, 2009 1:16 am
Location: Kokkola

Re: Ihme hämärä ongelma coolbasicissa!?

Post by mikkois »

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?
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: Ihme hämärä ongelma coolbasicissa!?

Post by Viltzu »

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?
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.
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Ihme hämärä ongelma coolbasicissa!?

Post by legend »

07 (ainakin mull =D) pyörittää pelejä ilman framelimittiä 60-340, mutta perus on 65.
Latexi95
Guru
Posts: 1166
Joined: Sat Sep 20, 2008 5:10 pm
Location: Lempäälä

Re: Ihme hämärä ongelma coolbasicissa!?

Post by Latexi95 »

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?
Yleensähän framelimit rajoittaa myös pelimoottorin päivitystä, joten joissain tapauksissa
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)
mikkois
Newcomer
Posts: 43
Joined: Wed Sep 02, 2009 1:16 am
Location: Kokkola

Re: Ihme hämärä ongelma coolbasicissa!?

Post by mikkois »

Latexi95 wrote: Minusta kannattaa laittaa kaikki tapahtumaan suhteessa
aikaan, niin FPS:llä ei ole väliä. (kunhan se on jotenkin pelattavissa lukemissa)
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.
atomimalli
Moderator
Moderator
Posts: 227
Joined: Wed Aug 29, 2007 3:55 pm

Re: Ihme hämärä ongelma coolbasicissa!?

Post by atomimalli »

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.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Ihme hämärä ongelma coolbasicissa!?

Post by koodaaja »

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.
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
Moderator
Moderator
Posts: 227
Joined: Wed Aug 29, 2007 3:55 pm

Re: Ihme hämärä ongelma coolbasicissa!?

Post by atomimalli »

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.
mikkois
Newcomer
Posts: 43
Joined: Wed Sep 02, 2009 1:16 am
Location: Kokkola

Re: Ihme hämärä ongelma coolbasicissa!?

Post by mikkois »

mikkois wrote:peli saattaa ihan satunnaisesti jumittaa kunnes taas painan hiirellä "pelin ikkunaa" jolloin peli taas jatkuu ihan kuin mitään ei olisi tapahtunut.
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!

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?
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Ihme hämärä ongelma coolbasicissa!?

Post by Awaclus »

Voithan tietysti kokeilla cbFUNista löytyvää funktiota, joka pitää jonkin ikkunan aina päällimmäisenä. En tiedä, toimisiko, mutta saattaisi ainakin.
mikkois
Newcomer
Posts: 43
Joined: Wed Sep 02, 2009 1:16 am
Location: Kokkola

Re: Ihme hämärä ongelma coolbasicissa!?

Post by mikkois »

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?
mikkois
Newcomer
Posts: 43
Joined: Wed Sep 02, 2009 1:16 am
Location: Kokkola

Re: Ihme hämärä ongelma coolbasicissa!?

Post by mikkois »

Latexi95 wrote: Minusta kannattaa laittaa kaikki tapahtumaan suhteessa
aikaan, niin FPS:llä ei ole väliä. (kunhan se on jotenkin pelattavissa lukemissa)
Ja toinen lainaus "Vakionopeus saavutetaan mittaamalla frameen kuluva aika ja jakamalla sillä haluttu matka tuhannessa sekunnissa."

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. :)
mikkois
Newcomer
Posts: 43
Joined: Wed Sep 02, 2009 1:16 am
Location: Kokkola

Re: Ihme hämärä ongelma coolbasicissa!?

Post by mikkois »

JEBOU!!!!

Ongelma ratkesi ja nyt on taas hieno jatkaa!
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Ihme hämärä ongelma coolbasicissa!?

Post by Jonez »

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.

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
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
Post Reply