Latausteksti/viiva

Voit pyytää apua ohjelmointiongelmiin täältä.
Post Reply
Panzur
Newcomer
Posts: 32
Joined: Sat Jun 06, 2009 6:26 pm

Latausteksti/viiva

Post by Panzur »

Elikkä ongelmana on miten saan pelin alkuuni lataus viivan, jonka keskellä lukee prosentti määrä ja teksti ladataan?

:?:
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: Latausteksti/viiva

Post by Awaclus »

Vaikka näin.

Code: Select all

latausviiva = loadobject ("media\latausviiva.bmp")
locate 160, 120
addtext "prosentti määrä ja teksti ladataan"
drawscreen
waitkey
Sitten seuraavaksi voisin yrittää auttaa oikeastikin, vaikka viestisi kieliasu provosoikin yllä olevan kaltaiseen vastaukseen.

Katso manuaalista kohdat Box, Color ja Text ja käytä muuttujaa ja aivoja. Näin pitäisi onnistua yksinkertainen palkki.
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Latausteksti/viiva

Post by Jonez »

Onneksi en itse provosoitunut ollenkaan, joten pystyin juuri ja juuri ojentamaan auttavan käteni.

Latauspalkki toimii näin:
Meillä on kutsukerrat "k". Tämä kertoo kuinka monta kertaa _päivitämme_ latauspalkin.
Sitten meillä on muuttuja "i", joka kertoo monesko kutsu (eli päivitys) on menossa.

Tästä saamme prosenttimäärän p#, joka on: p# = i / k. Tulos on desimaaliluku väliltä 0-1. Jos haluamme sen prosenteiksi, kerromme sadalla.

Joka kutsukerralla teemme tuon matemaattisen toimituksen ja piirrämme näytölle tuloksen. Voimme käyttää myös muita visuaalisia tehokeinoja. Alapuolella olevassa esimerkissä piirrän laatikon, joka kasvaa prosenttien myötä. Eli suurinpiirtein näin:

Code: Select all

Box x, y, kokonaisleveys * p#, korkeus. 
Kokonaisleveys on leveys, kun prosentit ovat 1, eli kun lataus on suoritettu.

Tässä koodi jota EI kuulu kopioida suoranaan, vaan lukea läpi ja opetella.

Code: Select all

FrameLimit 40

Function LoadBar( _valmiina, _määrä# )

    ClearText
    
    _pros# = _valmiina / _määrä         'kuinka monta prosenttia valmiina...
    _width# = ScreenWidth() * _pros#    'laajeneva laatikko
    _height = 20                        'laatikon korkeus
    
    _cX = ScreenWidth() / 2 - _width / 2 'laatikon "kekusta" ruudulla
    _cY = ScreenHeight() / 2 - _height / 2

    Color cbGreen
    Box _cX, _cY, _width, _height 'piirretään laatikko
    
    Color cbWhite 'kirjoitetaan prosenttimäärä
    _txt$ = "Loading ... " + Int( _pros# * 100 )  + " %"
    Locate ScreenWidth() / 2 - TextWidth( _txt$ ) / 2, _cY
    AddText _txt$
    DrawScreen
    
EndFunction

//Päivitetään latausboksi. HUOM: mitä useammin päivitetään, sitä hitaammin itse lataus menee (koska kutsumme
//DrawScreeniä).

//Tärkeää: LoadBar-funktiolle syötetään "i", eli missä kohtaa ollaan, sekä LATAUSMÄÄRÄ, joka kertoo
//kuinka monta kertaa kutsumme LoadBaria kokonaisuudessaan.
LATAUSMÄÄRÄ = 525
For i = 1 To LATAUSMÄÄRÄ
    If i Mod 5 = 0 Then         'kutsumme vain joka viidennellä latauspalkkia. Tämä kertoo palkin "sulavuuden"
        LoadBar( i, LATAUSMÄÄRÄ )
    EndIf
Next i

Text 20, 20, "Lataus valmis!"
DrawScreen
WaitKey
Edit. typos.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
User avatar
Timblex
Advanced Member
Posts: 252
Joined: Sun Apr 11, 2010 10:37 am
Location: Kouvola

Re: Latausteksti/viiva

Post by Timblex »

Miten saa niin että latauspalkki menee koko sen ajan kun mediaa ladataan siis ei näin

Code: Select all

ukko=loadobject("media/guy.bmp")
box 0,0,10,10
drawscreen
pati=loadobject("media/bullet.bmp")
box 0,0,20,10
drawscreen
ääni=loadsound("media/blaster.wav")
box 0,0,30,10
drawscreen
waitkey 
Entinen timpe99...
Demokisa 2013 demo valmis, Check it out!
User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Latausteksti/viiva

Post by Jonez »

Saat tuon aikaiseksi pienellä huijauksella. Eli päivität latauspalkkia vaikka mitään ei oikeastaan päivitysten välissä ladata.

Seuraavassa esimerkissä päivityspalkkia päivitetään 100 kertaa, mutta itse latauksia on vain viisi, siroteltuna tasaisesti päivitysten väliin.

Code: Select all

FrameLimit 40

Function LoadBar( _valmiina, _määrä# )

    ClearText
    
    _pros# = _valmiina / _määrä         'kuinka monta prosenttia valmiina...
    _width# = ScreenWidth() * _pros#    'laajeneva laatikko
    _height = 20                        'laatikon korkeus
    
    _cX = ScreenWidth() / 2 - _width / 2 'laatikon "kekusta" ruudulla
    _cY = ScreenHeight() / 2 - _height / 2

    Color cbGreen
    Box _cX, _cY, _width, _height 'piirretään laatikko
    
    Color cbWhite 'kirjoitetaan prosenttimäärä
    _txt$ = "Loading ... " + Int( _pros# * 100 )  + " %"
    Locate ScreenWidth() / 2 - TextWidth( _txt$ ) / 2, _cY
    AddText _txt$
    DrawScreen
    
EndFunction

//Päivitetään latausboksi. HUOM: mitä useammin päivitetään, sitä hitaammin itse lataus menee (koska kutsumme
//DrawScreeniä).

//Tärkeää: LoadBar-funktiolle syötetään "i", eli missä kohtaa ollaan, sekä LATAUSMÄÄRÄ, joka kertoo
//kuinka monta kertaa kutsumme LoadBaria kokonaisuudessaan.
LATAUSMÄÄRÄ = 100
For i = 1 To LATAUSMÄÄRÄ
    If i = 20 Then 
        ukko1 = LoadObject( "media\guy.bmp" )
       ' ShowObject ukko1, OFF
       PositionObject ukko1, Rand( -100, 100 ), Rand( -100, 100 )
    ElseIf i = 40 Then
        ukko2 = LoadObject( "media\guy.bmp" )
     '   ShowObject ukko2, OFF
        PositionObject ukko2, Rand( -100, 100 ), Rand( -100, 100 )
    ElseIf i = 60 Then
        ukko3 = LoadObject( "media\guy.bmp" )
     '   ShowObject ukko3, OFF
        PositionObject ukko3, Rand( -100, 100 ), Rand( -100, 100 )
    ElseIf i = 80 Then
        ukko4 = LoadObject( "media\guy.bmp" )
      '  ShowObject ukko4, OFF
        PositionObject ukko4, Rand( -100, 100 ), Rand( -100, 100 )
    ElseIf i = 100 Then
        ukko5 = LoadObject( "media\guy.bmp" )
    '    ShowObject ukko5, OFF
        PositionObject ukko5, Rand( -100, 100 ), Rand( -100, 100 )
    EndIf
    
     LoadBar( i, LATAUSMÄÄRÄ )
Next i
ClearText()

DrawScreen
WaitKey
Edit. pientä sekoilua latauksessa...
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
Image <- protestipelikilpailun voittaja.
Space War
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Latausteksti/viiva

Post by JATothrim »

wanhalla CoolBasicilla ei voi tehdä aitoa ja sulavaa lataus palkkia, koska CB:ssä ei voi tehdä kahta asiaa yhtä aikaa. Eli kun lataus palkki liikkuu, ohjelma todellakin lataa jotain, eikä vain piirrä lataus palkkia. Tähän tarvittaisiin säikeitä, joita on hyvin, hyvin harvassa tulkatussa kielessä.
PS: CBC:hen on kuitenkin suunnitelmissa jotain hianoa tähän tarkoitukseen. ;)
-On selkeästi impulsiivinen koodaaja joka...
ohjelmoi C++:lla rekursiivisesti instantioidun templaten, jonka jokainen instantiaatio instantioi sekundäärisen singleton-template-luokan, jonka jokainen instanssi käynistää säikeen tulostakseen 'jea'.
koodaaja
Moderator
Moderator
Posts: 1583
Joined: Mon Aug 27, 2007 11:24 pm
Location: Otaniemi - Mikkeli -pendelöinti

Re: Latausteksti/viiva

Post by koodaaja »

Luonnollisesti voi itse avata kuvatiedoston ja tietyn tavumäärän välein päivitellä palkkia kopioinnin ohessa, mutta en tiedä onko se sen arvoista. Itse pistin joskus maaston tai vastaavan precalcciin palkin, se on toisaalta hivenen suoraviivaisempaa kun for-looppi on olemassa jo valmiiksi :)

Eikä tunnu kaupallisissakaan peleissä kovin hyvät latauspalkit yleensä olevan, hyppivät eteenpäin vähän miten sattuu. CB-pelissä latauspalkki on kuitenkin vähän turhake, ladattavaa on yleensä niin vähän muutenkin.
Wingman @koulu

Re: Latausteksti/viiva

Post by Wingman @koulu »

koodaaja wrote:...Eikä tunnu kaupallisissakaan peleissä kovin hyvät latauspalkit yleensä olevan, hyppivät eteenpäin vähän miten sattuu. CB-pelissä latauspalkki on kuitenkin vähän turhake, ladattavaa on yleensä niin vähän muutenkin.
Joo, yleensähän CB-pelit lataavat tavaransa alle puolessa sekunnissa, ei palkkia sinänsä tarvita. Isoimmissa projekteissa latauspalkki on ihan hyvä, kun ihminen kyllästyy helposti mustaa ruutua tuijottaessa.
Herra Siili
Advanced Member
Posts: 308
Joined: Tue Nov 25, 2008 8:06 pm
Contact:

Re: Latausteksti/viiva

Post by Herra Siili »

Yksi tapaushan jossa latauspalkkia käytetään, on esim. pyöritettäessä kuvia valmiiksi taulukkoon. Tällöinhän latauspalkkia voidaan päivittää vaikkapa jokaisen yksittäisen kuvan jälkeen.
a.k.a. Gehock
User avatar
Timblex
Advanced Member
Posts: 252
Joined: Sun Apr 11, 2010 10:37 am
Location: Kouvola

Re: Latausteksti/viiva

Post by Timblex »

Tein tämmösen :D

Code: Select all

//LoadBar Funktio muokannut Timpe99
_r=255
Function lb( _valmiina, _määrä#=50 )

    ClearText
   
    _pros# = _valmiina / _määrä         'kuinka monta prosenttia valmiina...
    _width# = ScreenWidth() * _pros#    'laajeneva laatikko
    _height = 20                        'laatikon korkeus
    _cY = ScreenHeight() / 2 - _height / 2
_g=_valmiina*5
_r=_r-_g
    Color _r,_g,0
    Box 0, _cY, _width, _height 'piirretään laatikko
    Color cbBlue
   Box 0,_cY,ScreenWidth(),20,0
    Color cbWhite 'kirjoitetaan prosenttimäärä
    _txt$ = "Loading ... " + Int( _pros# * 100 )  + " %"
    Locate ScreenWidth() / 2 - TextWidth( _txt$ ) / 2, _cY
    AddText _txt$
   
EndFunction
////////////////////////////////////////////////
/*
Kun käytät lb funtiota niin ON
ärsyttävää kun pitää kaikkiin kohtiin yksitellen 
kirjoittaa edellistä suurempi luku
*/ 
remstart
näin:
hiiri=LoadImage("media/cursor.bmp")
lb(1)
DrawScreen
hiiri2=LoadImage("media/crosshair.bmp")
lb(2)
DrawScreen
hiirenpää=MakeImage(1,1)
lb(3) 
remend
/*
ratkaisu ON tässä:
*/ 
    //Tiedosto jossa on koodi
    //esim. hiiri=LoadImage("dmedia/cursor.bmp")
    //lb(1)
    //DrawScreen
    //hiiri2=LoadImage("dmedia/crosshair.bmp")
    //lb(1)
    //DrawScreen
    //hiirenpää=MakeImage(1,1)
    //lb(1)
    lähde$="koodi.txt"
    //Tiedosto johon tulee valmis koodi
    //esim. hiiri=LoadImage("media/cursor.bmp")
    //lb(1)
    //DrawScreen
    //hiiri2=LoadImage("media/crosshair.bmp")
    //lb(2)
    //DrawScreen
    //hiirenpää=MakeImage(1,1)
    //lb(3) 
    kohde$="koodi2.txt"
    //Avataan tiedosto jossa on koodi
    f=OpenToRead(lähde)
    //Luodaan tiedosto johon tulee valmis koodi    
    f2=OpenToWrite(kohde)
    //Silmukka
    While Not EOF(f)
        i+1
        // Rivi jolla on lb funktio
        rivi$=ReadLine(f)
        //Drawscreen
        turha1$=ReadLine(f)
        //SCREEN 1024,600,0,0
        turha2$=ReadLine(f)
        //Kirjoitetaan rivit kohde tiedostoon
        WriteLine f2,Replace(rivi,"1",Str(i))
        WriteLine f2,turha1
        WriteLine f2,turha2
    Wend
    //Valmis!
    Print "Valmis!"
    WaitKey
Entinen timpe99...
Demokisa 2013 demo valmis, Check it out!
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Latausteksti/viiva

Post by legend »

Mitäs se tekee? En nyt jaksa lähteä kokeilemaan kun tulee "error" ja kun ne korjaa tulee "cannot open file...".
Post Reply