1. Voiko ohjelmassa pyöriä kahta silmukkaa samaan aikaan, miten?
2. Miten saan käskettyä koneen ottamaan kuvan työpöydästä (printscreen) ohjelman sisällä, ei pelistä vaan koko työpöydästä?
1. Mihin tätä tarvitaan?
2. Ei ole tietoa, mutta luulisi, että jostain lisäkirjastosta löytyy.
EDIT: ARRGH, aina jää nuo seuraavalle sivulle postatut viestit lukematta, kun painelee vaan sitä "uusi viesti" -nappulaa siinä topicin nimen edessä
Last edited by Awaclus on Sat Aug 29, 2009 7:12 pm, edited 1 time in total.
2. Miten saan käskettyä koneen ottamaan kuvan työpöydästä (printscreen) ohjelman sisällä, ei pelistä vaan koko työpöydästä?
Hahahahah... Et ehkä saa tätä ikinä aikaiseksi... Ainakaan sillä tavalla millä minä sen tekisin... CBFun kirjastossa on _GetPixel()-funktio jolla saadaan pikseli RUUDULTA, ei pelistä, se tallentaa pikselin samalla tapaa kuin CB:n oma GetPixel, joka hakee pikselin pelistä. ELi otat KOKO RUUDUN _GetPixel:llä, eli käyt FOR-lausekkeessa läpi jokaisen pikselin. En sitten tiedä millä saat koneen reson ulos... No sitten piirtämiseen joka tapahtuu _PutPixel komennolla...
ELikkä sinun kannattaa tehdä yhtä iso kuva kuin koneesi reso. Sitten piirrät sinne jokaisen pikslin _PutPixel-funkkarilla jotka sait _GetPixel.funkkarilla. Sitten tallennat tuon kuvan SaveImage:lla. Helppoa!!
Edit: Ai ni, se eka kysymys... Repeat:n sisään Repeat... kai se nyt menee jokaisen päähän...
Ei onnistu cb:llä eikä ilman kehittyneitä ohjelmointiskillejä. Miksi haluaisit kaksi looppia samaan aikaan? Kaikki mitä voit keksiä voi hoitaa myös eriaikaisilla loopeilla.
Edit. Sano mitä haluat tehdä niin kerromme miten se tehdään.
-Vuoden 2008 aloittelijan ystävä -palkinnon voittaja-
<- protestipelikilpailun voittaja. Space War
Se olisi vain nopeuttanut ohjelman tekoa, jossa on lataus, jonka aikana pyörisi video.
(huom. Lataus ei ole peliä varten, ohjelmaa, joka tekee pitkän latauksen.)
Jonez wrote:Ei onnistu cb:llä eikä ilman kehittyneitä ohjelmointiskillejä. Miksi haluaisit kaksi looppia samaan aikaan? Kaikki mitä voit keksiä voi hoitaa myös eriaikaisilla loopeilla.
...tai laittaa siihen samaan looppiin, jolloinka vaikutus olisi sama, kuin että olisi kaksi looppia yhtä aikaa.
On mahdollista pyörittää videota samalla kun lataa kuvia taustalla. Se tosin vaatii hieman säätöä ja on paljon hitaampaa kuin kuvien lataaminen suoraan. Tässä hiomaton esimerkki kuvien taustalatauksesta.
SCREEN 1024,768
If Not FileExists("media\map.idf") Then DataFromImage("media\map.bmp")
mem = MakeMEMBlock(8)
Repeat
mem = ImageFromData("media\map.idf",mem,5000)
img = PeekInt (mem,0)
DrawImage img,0,0
SetWindow Str(FPS())
DrawScreen
Forever
Function ImageFromData(dDir$,mem=0,speed=100)
If FileExists(dDir$) Then
If mem=0 Then
f = OpenToRead(dDir)
iWidth = ReadShort (f)
iHeight = ReadShort (f)
img = MakeImage(iWidth,iHeight)
Lock Image(img)
For y=0 To iHeight-1
For x=0 To iWidth-1
pixel = ReadInt (f)
PutPixel2 x,y,pixel,Image(img)
Next x
Next y
Unlock Image(img)
CloseFile f
Return img
ElseIf mem<>0 And MEMBlockSize(mem)=8 Then
img = PeekInt(mem,0)
firstpointer = PeekInt(mem,4)
If firstpointer<>-1 Then
pointer = firstpointer
f = OpenToEdit(dDir)
iWidth = ReadShort (f)
iHeight = ReadShort (f)
If img=0 Then img = MakeImage(iWidth,iHeight)
SeekFile f,pointer
Lock Image(img)
y=0
x=0
While pointer<firstpointer+speed And y<iHeight And x<iWidth
pixels = (pointer-4)/4
y = pixels/iWidth
x = pixels-y*iWidth
pixel = ReadInt (f)
PutPixel2 x,y,pixel,Image(img)
pointer = FileOffset(f)
Wend
Unlock Image(img)
CloseFile f
mem = MakeMEMBlock(8)
PokeInt mem,0,img
PokeInt mem,4,pointer
Return mem
Else
Return mem
EndIf
EndIf
Else
MakeError "File "+iDir$+" not found."
EndIf
End Function
Function DataFromImage(iDir$)
If FileExists(iDir$) Then
img = LoadImage(iDir$)
iWidth = ImageWidth(img)
iHeight = ImageHeight(img)
dDir$ = Left(iDir$,Len(iDir$)-4)+".idf"
f = OpenToWrite(dDir$)
WriteShort f,iWidth
WriteShort f,iHeight
Lock Image(img)
For y=0 To iHeight-1
For x=0 To iWidth-1
pixel = GetPixel2(x,y,Image(img))
WriteInt f,pixel
Next x
Next y
Unlock Image(img)
CloseFile f
Return dDir$
Else
MakeError "File "+iDir$+" not found."
EndIf
End Function
Kun ajan tämän ohjelman taustan pitäisi tulla punaikseksi,
mutta se muuttuuu vasta silloin kun suurentaa tai pienentää ruutua, miksi?
Huomasin tämän ihan vahingossa.
11v wrote:Kun ajan tämän ohjelman taustan pitäisi tulla punaikseksi,
mutta se muuttuuu vasta silloin kun suurentaa tai pienentää ruutua, miksi?
Huomasin tämän ihan vahingossa.
Cls kutsutaan drawscreenissä oletettavasti viimeisenä, muutenhan se tyhjentäisi sinne juuri piirretyn tavaran. Ja siinä vaiheessa uudenvärinen tausta piirretään backbufferiin jota ei siis piirretä ellei ole toista drawscreeniä.
Global tiedostopääte$
Global Y
SetWindow "Testi", 0, "Oletko varma?"
///////////////////////////////////////////////////////////////////////////77
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////7
//////////////////////////////////////////////////////////////////////////////
Haetaan$ = "C:\Documents and Settings\All Users\Tiedostot\Omat kuvatiedostot"
Repeat
Text 0, 0, "Ohjelma etsii tiedostoja ja merkkaa muistiin"
Text 0, 20, "niiden nimet. "
Text 0, 60, "Aloita Painamalla Enter"
DrawScreen
Until KeyHit (28)
///////////////////////////////////////////////////////////////////////////77
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////7
//////////////////////////////////////////////////////////////////////////////
ClearText
SetWindow "Odota hetki", 0, "Jos lopetat ohjelman, siitä voi tula pahoja sivu vaukutuksia!"
///////////////////////////////////////////////////////////////////////////77
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////7
//////////////////////////////////////////////////////////////////////////////
aika = Timer() ' Aloitetaan ajanlasku
FrameLimit 0
tiedostopääte = "" ' Tiedostopääte ei ole mitään
' Tehdään 'Fuktio' sulkeissa olevaan paikkaan
f=OpenToWrite("Tiedostot.Found")
LöydäTiedostot(Haetaan$)
CloseFile f
SetWindow "lataus suoritettiin "+(Timer()-aika)+" milliseukunnissa.", 0, "Founder on ajan tasalla!" ' Kertoo ajan
CloseInput
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
Alku:
Repeat 'Alku silmmukka
Text 0,0, "Valmis"
Wait 2500
Exit
Until EscapeKey ()
End
///////////////////////////////////////////////////////////////////////////////
'///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////7
/////////////////////////////////////////////////////////////////////////////7
Function LöydäTiedostot(Polku$) 'Aloittaa funktion
ChDir "C:\Program Files\CoolBasic"
Polku$ = Polku$ + "\" 'Laittaa Polun väliin ' /
ChDir Polku$ 'Etsitään kohteesta 'Polku
StartSearch ' Aloittaa etsimisen
file$ = FindFile() ' Kirjoitettu File$ on
file = FindFile() ' Sama kuin pelkkä file
Repeat
file=FindFile() ' Nyt kummatkin filet ovat tässä, sillä toisella keralla
' Ei tarvitse käyttää tätä '$' merkkiä
If IsDirectory(file) ' Jos file on kansio sitten
WriteLine f, file + " " + Replace (Polku$, " ", "%20") + Replace (file$, " ", "%20")
EndSearch ' Lopettaa etsimisen
LöydäTiedostot(Polku$+file) 'Aloittaa uuden funktion, poluksi tulee Polku + File
ChDir Polku$ ' Kun se palaa takaisin funktiosta, kohteeksi tulee Polku$
StartSearch 'Aloittaa etsimisen
Repeat ' Aloittaaa silmukan '(Silmukka etsiii, kansiot jotka ovat
joku$ = FindFile() '' jo etsitty) ' Eikä tee niillä mitään.
Until joku$ = file ' Lopettaa vasta sitten, kun Joku = file
ElseIf Right(file,Len(tiedostopääte$)) = tiedostopääte$
WriteLine f, file + " " + Replace (Polku$, " ", "%20") + Replace (file$, " ", "%20")
EndIf ' Lopettaa if
Until file = "" ' Lopettaa silmukan jos file = ""
EndSearch 'Lopettaa etsimisen
Return 0 ' Palautaa arvoja
EndFunction ' Lopettaa Funktion
Aloittelija_super, koita laittaa koodin alkuun rivi Global f. Ainakin yksi ongelma ohjelmassasi nimittäin on se, että ensin avaat tiedostoon kirjoittamisen paikalliseen muuttujaan nimeltä f, mutta sitten hypäät funktioon tekemään varsinaiset kirjoituskäskyt. Käytännön efekti tässä on se, että funktiossa f:n arvo on 0, joten se ei osoita enää avaamaasi tiedostoon. Tämä tappaa ohjelman.
Global f tekee f-muuttujasta kuolemattoman, jolloin sen arvo säilyy aina, vaikka menisit funktioon. Lyhytnimisten muuttujien (erityisesti yksikirjaimisten) määrittäminen globaaliksi ei ole mikään sievä tapa ohjelmoida, koska se rajoittaa muuttujien käyttöä todella paljon, mutta tässä tapauksessa se ei tekisi hirveätä poikkeusta ohjelmasi koodiasuun.
SCREEN 700,150
Global Tiedostopääte$
Global Tiedosto$
Global Y
Global f
SetWindow "Founder ajan tasalle", 0, "Oletko varma?"
///////////////////////////////////////////////////////////////////////////77
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////7
//////////////////////////////////////////////////////////////////////////////
' "C:\Documents and Settings\All Users\Tiedostot\Omat kuvatiedostot"
Repeat
Locate 0,20
Haetaan$ = Input("")
Text 0,0, "Kirjoita mistä haetaan: "
Text 0,60, "Jatka painamalla Enter"
DrawScreen
Until KeyHit (28)
CloseInput
Repeat
Locate 0,0
Tiedosto$ = Input("Kirjoita tiedoston pääte: ")
Text 0, 20, "Huom. Pistettä ei pidä laittaa."
Text 0, 60, "Aloita Painamalla Enter"
DrawScreen
Until KeyHit (28)
Tiedostopääte$ = Tiedosto$
CloseInput
///////////////////////////////////////////////////////////////////////////77
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////7
//////////////////////////////////////////////////////////////////////////////
ClearText
SetWindow "Odota hetki", 0, "Jos lopetat ohjelman, siitä voi tula pahoja sivu vaukutuksia!"
///////////////////////////////////////////////////////////////////////////77
///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////7
//////////////////////////////////////////////////////////////////////////////
aika = Timer() ' Aloitetaan ajanlasku
FrameLimit 0
' Tehdään 'Fuktio' sulkeissa olevaan paikkaan
f=OpenToWrite(Tiedostopääte$ + " Tiedostot.Found")
LöydäTiedostot(Haetaan$)
CloseFile f
SetWindow "lataus suoritettiin "+(Timer()-aika)+" milliseukunnissa.", 0, "Founder on ajan tasalla!" ' Kertoo ajan
CloseInput
////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
Alku:
Repeat 'Alku silmmukka
Text 0,0, "Valmis"
Wait 5000
Exit
Until EscapeKey ()
End
///////////////////////////////////////////////////////////////////////////////
'///////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////7
/////////////////////////////////////////////////////////////////////////////7
Function LöydäTiedostot(Polku$) 'Aloittaa funktion
Polku$ = Polku$ + "\" 'Laittaa Polun väliin ' /
ChDir Polku$ 'Etsitään kohteesta 'Polku
StartSearch ' Aloittaa etsimisen
file$ = FindFile() ' Kirjoitettu File$ on
file = FindFile() ' Sama kuin pelkkä file
Repeat
file=FindFile() ' Nyt kummatkin filet ovat tässä, sillä toisella keralla
' Ei tarvitse käyttää tätä '$' merkkiä
If IsDirectory(file) ' Jos file on kansio sitten
EndSearch ' Lopettaa etsimisen
LöydäTiedostot(Polku$+file) 'Aloittaa uuden funktion, poluksi tulee Polku + File
ChDir Polku$ ' Kun se palaa takaisin funktiosta, kohteeksi tulee Polku$
StartSearch 'Aloittaa etsimisen
Repeat ' Aloittaaa silmukan '(Silmukka etsiii, kansiot jotka ovat
joku$ = FindFile() '' jo etsitty) ' Eikä tee niillä mitään.
Until joku$ = file ' Lopettaa vasta sitten, kun Joku = file
ElseIf Right(Lower(file),Len(Tiedostopääte$)) = Lower (Tiedostopääte$)
WriteLine f, file + " " + Replace (Polku$, " ", "%20") + Replace (file$, " ", "%20")
EndIf ' Lopettaa if
Until file = "" ' Lopettaa silmukan jos file = ""
EndSearch 'Lopettaa etsimisen
Return 0 ' Palautaa arvoja
EndFunction ' Lopettaa Funktion
Miksi Tiedostopääte ei toimi. Eli sen pitäisi kirjoittaa muistiin ainoastaan ne jonka tiedosto pääte on itse valittu.
Vosiko joku auttaa taas.
Miksiiiiiiiiiii!
Suosittelisin rekisteröitymään foorumeille. Se ei vie kuin pari minuuttia, ja tuplapostaukset ovat aika abysmaalisia verrattuna siihen, että muokkaisit vanhaa postiasi, ja tervetuloa vain foorumeille