Page 154 of 154

Re: Tyhmät kysymykset

Posted: Thu Jun 04, 2009 4:12 pm
by Guest
Miten voin piirtää ruudun niin, että ensin tulee alimmaiseksi taustakuva, sitten taustakuvan päälle laatikko ja laatikon päälle kursori (objektina).

Olen kokeillut DrawGamea eri paikoissa mutta ohjelma piirtää aina niin, että taustakuva on alhaalla aivan oikein, mutta sitten kursori piirtyy taustakuvan ja laatikon väliin niin, että laatikko on aina päällimmäisenä.

Re: Tyhmät kysymykset

Posted: Thu Jun 04, 2009 4:24 pm
by esa94
Vieras wrote:Miten voin piirtää ruudun niin, että ensin tulee alimmaiseksi taustakuva, sitten taustakuvan päälle laatikko ja laatikon päälle kursori (objektina).

Olen kokeillut DrawGamea eri paikoissa mutta ohjelma piirtää aina niin, että taustakuva on alhaalla aivan oikein, mutta sitten kursori piirtyy taustakuvan ja laatikon väliin niin, että laatikko on aina päällimmäisenä.
Jos kursori on objekti, se piirretään, kun komennat drawgame. Tee siis kursorista kuva ja piirrä se laatikon jälkeen.

Re: Tyhmät kysymykset

Posted: Thu Jun 04, 2009 4:25 pm
by Sly_Jack0

Code: Select all

img = LoadImage("media/map.bmp")
obj = LoadObject("media/cow.bmp")

ShowMouse OFF

Repeat

	PositionObject obj,MouseWX(),MouseWY()

	DrawImage img,0,0
	Box 10,10,100,100
	
	DrawScreen
	
Forever

Re: Tyhmät kysymykset

Posted: Thu Jun 04, 2009 4:29 pm
by esa94
Sly_Jack0 wrote:

Code: Select all

img = LoadImage("media/map.bmp")
obj = LoadObject("media/cow.bmp")

ShowMouse OFF

Repeat

	PositionObject obj,MouseWX(),MouseWY()

	DrawImage img,0,0
	Box 10,10,100,100
	
	DrawScreen
	
Forever

Code: Select all

img = LoadImage("media/map.bmp")
jyrsijä = LoadImage("media/cow.bmp")

ShowMouse OFF

Repeat

	DrawImage img,0,0
	Box 10,10,100,100
    DrawImage jyrsijä, MouseX(), MouseY()
	
	DrawScreen
	
Forever
Tuohon tapaan kait. Ei nyt ole CB auki.

Re: Tyhmät kysymykset

Posted: Thu Jun 04, 2009 4:34 pm
by phons
Mitä järkeä: DrawImage obj,MouseX(),MouseY()
Kun on: ShowMouse obj.
Mutta silti kannatan objektia kursoriksi. Esim. strategia: ei voi käyttää ObjectsOverlap()-funktiota jos on hiiri kuvana ja on ärsyttävää kikkaila MouseX() ja MouseY() - funktioilla.

Re: Tyhmät kysymykset

Posted: Thu Jun 04, 2009 4:42 pm
by Guest
Anteeksi, unohdin mainita että kartta (tileistä tehty) piirretään myös tuossa, eli siis piirtojärjestyksen pitäis olla tällainen (1 = alin, 4 = ylin):
1. taustakuva
2. kartta (tileistä)
3. laatikko
4. kursori

Kokeilin käyttää esimerkkejänne tilekartan kanssa, mutta ongelma on siinä että kartta peittää väkisinkin jotain alleen... DrawGamea olen yrittänyt jotta saan sen piirtojärjestyksen oikeaksi, mutta se ei vain onnistu.

Re: Tyhmät kysymykset

Posted: Thu Jun 04, 2009 5:17 pm
by soitin
phons wrote:
Soitin wrote:Valitettavasti tämä saa minulla ainoastaan tuon tekstin "Paina enter ladataksesi kuvan" näkymään, eikä entteriä painaessa tapahdu mitään.

Code: Select all

Include "C:\Program Files\CoolBasic\SDK\include\cbAPI.cb"
Repeat
    If KeyHit( CbKeyReturn )
        If FileDialog( OPEN_FILE_DLG, "bmp", "", "Image Files|*.bmp;*.jpg;*.png;*.tga|" ) = IDOK Then
            If img <> 0 Then DeleteImage img
            img = LoadImage( FileDialogData( FD_FULLNAME ) )
        EndIf
    EndIf
   
    if img <>  0 then DrawImage img, 0, 0
    Text 20, 20, "Paina enter ladataksesi kuvan."
       
    DrawScreen
Forever
Mikä käyttis? Voi olla, että tuo FileDialog toimii vähän eritavalla Vistassa kuin XP:ssä. Minulla ainakin toimii... :oops:
Vistahan täällä alla rullaa..

Re: Tyhmät kysymykset

Posted: Thu Jun 04, 2009 5:38 pm
by phons
soitin wrote:
phons wrote:
Soitin wrote:Valitettavasti tämä saa minulla ainoastaan tuon tekstin "Paina enter ladataksesi kuvan" näkymään, eikä entteriä painaessa tapahdu mitään.

Code: Select all

Include "C:\Program Files\CoolBasic\SDK\include\cbAPI.cb"
Repeat
    If KeyHit( CbKeyReturn )
        If FileDialog( OPEN_FILE_DLG, "bmp", "", "Image Files|*.bmp;*.jpg;*.png;*.tga|" ) = IDOK Then
            If img <> 0 Then DeleteImage img
            img = LoadImage( FileDialogData( FD_FULLNAME ) )
        EndIf
    EndIf
   
    if img <>  0 then DrawImage img, 0, 0
    Text 20, 20, "Paina enter ladataksesi kuvan."
       
    DrawScreen
Forever
Mikä käyttis? Voi olla, että tuo FileDialog toimii vähän eritavalla Vistassa kuin XP:ssä. Minulla ainakin toimii... :oops:
Vistahan täällä alla rullaa..
Ok, en ole tutkinut noiden FileDialogien toimintaa... Tietääkseni se on erilainen Vistassa, joten ehkei se osaa tehdä siinä vaiheessa mitään. Tosin se voisi kyllä heittää jotain erroriakin, jos CB:ssä olisi DLL erroreita. ;)

Re: Tyhmät kysymykset

Posted: Thu Jun 04, 2009 5:49 pm
by Guest
Guest wrote:piirtojärjestyksen pitäis olla tällainen (1 = alin, 4 = ylin):
1. taustakuva
2. kartta (tileistä)
3. laatikko
4. kursori
Tässä vielä esimerkkikoodi, toivottavasti joku osaa auttaa että saisin tähän oikean piirtojärjestyksen aikaan:

Code: Select all

map= LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject map,0,0,0.5
img = LoadImage("media/map.bmp")
obj = LoadObject("media/cow.bmp")
ShowMouse OFF
Repeat
   PositionCamera -150, -900
    DrawImage img,0,0

    DrawGame
      
    Color cbsilver
    Box 10,10,100,100

    If KeyDown(200) Then TranslateCamera 0, 5
    
    If KeyDown(208) Then TranslateCamera 0, -5

    If KeyDown(203) Then TranslateCamera -5, 0

    If KeyDown(205) Then TranslateCamera 5, 0

    DrawScreen
    PositionObject obj,MouseWX(),MouseWY()
   
Forever

Re: Tyhmät kysymykset

Posted: Fri Jun 05, 2009 8:54 am
by cool-driver
cool-driver wrote:Ja mikä tässä on vikana?

Code: Select all

pyri_diktaattoriksi:
ClearText
ClearKeys
CloseInput

ClsColor 192,0,0
Cls
Color 255,255,255

AddText "Täällä voit käynnistää presidentin ja pääministerin vaalit vaalit."
AddText ""
If presidentti = 0 Then 
AddText "Octobaban presidentti on Saeed Al Bakir. Hän on paennut Iso-Britanniaan.Hän on kapitalisti"
If pääministeri = 0 Then 
AddText "Octobaban pääministeri on Ahmed Al Base. Hän on paennut Iso-Britanniaan. Hän on kapitalisti."
If presidentti = 2 Then 
AddText "Octobaban presidentti on Basil Fakhouri. Hän on kommunisti."
If pääministeri = 2 Then
AddText "Octobaban pääministeri on Salamah Arafat. Hän on kommunisti."
If presidentti = 1 Then
AddText "Octobaban presidentti on Ahmed Al Bahad, eli sinä."
If presidentti = 1 Then 
AddText "Octobaban pääministeri on Ahmed Al Bahad eli sinä."
EndIf
AddText ""
If presidentti = 0 Then 
AddText "1. Järjestä presidentti vaalit."
If presidentti = 2 Then
AddText "1. Järjestä presidentin vaalit."
If pääministeri = 0 Then 
AddText "2. Järjestä pääministeri vaalit."
If pääministeri = 2 Then 
AddText "2. Järjestä pääministeri vaalit."
EndIf
AddText "Backspace - takaisin."

Repeat
 
    If KeyHit(cbkeybackspace) Then Goto toimisto
    
Forever  
EndIf
Tämän on siis vain pätkä koodista, mutta ongelma tuli vasta kun kirjoitin tämän. Kun tuossa lopussa ei ole tuota EndIf komentoa, niin se valittaa, että siellä ei ole EndIf komentoa, vaikka tekstissä on. No kun laitan tuon se valittaa, että ei löydä If sanaa mistään, vaikka siellä on. Mikä mättää?
Sain toimimaan kun laitoin jokaisen If-lauseen jälkeen EndIf:in. Se ei ole oikea tapa ja teke koodista hiukan(aika paljonkin) sekavaa, mutta se toimii.

Re: Tyhmät kysymykset

Posted: Fri Jun 05, 2009 2:52 pm
by Barbe-Q Michael
Onkohan tätä koodinpätkää (DatsuniG:n Opener) mahdollista muuttaa niin että sillä saa avattua .txt:n sijaan .mp3 -tiedostoja? Myöskin olisi hyödyllistä jos se osaisi etsiä niitä kohdekansion alikansioista. (Eikä hiirellä valinta olisi ollenkaan huono juttu.)

Code: Select all

FrameLimit 40

SetWindow "DG Opener"

Type FILES
    Field Name$
    Field Path$
    Field ID
EndType

currentID=0

StartSearch
Repeat
    tmp$=FindFile()
    If Lower(Right(tmp,4))=".txt" Then
        uusi.FILES = New(FILES)
        uusi\name=Replace(tmp,".txt","")
        uusi\path=tmp
        uusi\ID=currentID
        currentID=currentID+1
    EndIf
Until tmp=""

searchID=0
Waittime=Timer()
SPEED=100
MultipleFILES=False

main: ' PurQa
Repeat
x=2
y=2
For uusi.FILES = Each FILES
    If uusi\ID=searchID Then Color cbred Else Color cbwhite
    Text x,y,uusi\name
    y+15
    If y>300 Then x=x+200 : y=2
Next uusi

If KeyDown(cbkeydown) Then
    If Timer()-Waittime>SPEED Then
        SearchID=SearchID+1
        Waittime=Timer()
        SPEED=SPEED-5
        If SPEED<50 Then SPEED=50
    EndIf
Else
If KeyUp(cbkeyup) Then SPEED=100
EndIf

If KeyDown(cbkeyup) Then
    If Timer()-Waittime>SPEED Then
        SearchID=SearchID-1
        Waittime=Timer()
        SPEED=SPEED-2
        If SPEED<50 Then SPEED=50
    EndIf
Else
If KeyUp(cbkeydown) Then SPEED=100
EndIf

If SearchID>CurrentID-1 Then SearchID=0
If SearchID<0 Then SearchID=CurrentID-1

Color cbwhite
Text 400-TextWidth("Multi: 0")-2,2,"Multi: "+MultipleFILES

If KeyHit(cbkeyrshift) Then
    If MultipleFILES=1 Then MultipleFILES=0 Else MultipleFILES=1
EndIf

DrawScreen
Until KeyHit(cbkeyreturn)

For uusi.FILES = Each FILES
    If uusi\ID=searchID Then
        file=OpenToRead(uusi\path)
        temp$=ReadLine(file)
        If temp="" Then MakeError "Incorrect file!"
        Execute temp
        CloseFile file
        If MULTIPLEFILES=True Then goto main else End
    EndIf
Next uusi

Re: Tyhmät kysymykset

Posted: Fri Jun 05, 2009 10:07 pm
by JATothrim
Öhh.. ;) Et ilmeisesti ole tutkinut koodia 3 min kauempaa?

Code: Select all

StartSearch
Repeat
    tmp$=FindFile()
    If Lower(Right(tmp,4))=".txt" Then
        uusi.FILES = New(FILES)
        uusi\name=Replace(tmp,".txt","")
        uusi\path=tmp
        uusi\ID=currentID
        currentID=currentID+1
    EndIf
Until tmp=""
"If Lower(Right(tmp,4))=".txt" Then" tuossahan on se ehto joka määrää minkä tiedotostopäätteen omaavat tiedostot listataan.

Alikansioista ja niiden alikansioista (rekursiivinen) etsiminen on hieman vaikeampaa. Tässä ohjeet:
(ota nykyinen kansio talteen muuttujaan currentdir():llä)
1. Aloita kansion sisältön läpikäynti StartSearch:lla
2. ota tiedostonimi muuttujaan FindFile():llä
3. Jos tiedosto on kansio (isDirectory() = 1) eikä tiedostonimi ole kumpikaan näistä: "." tai ".." lisää kansio kokoelmaan (vaikka "SearchDirectory") talteen.
4. Jos tiedosto ei ollutkaan kansio, listää se polkuineen toiseen kokoelmaan (esim. "FoundFiles"). Tässä kohtaa "suodata" ei toivotut tiedostotyypit pois! (eli et lisää niitä kokoelmaan)
5. Toista kohtia 2. - 4. kunnes findfile() palauttaa tyhjän merkkijonon.
6. Lopeta haku EndSearch:lla. Ota kansio kokoelmasta vaikka ensimmäinen instanssi (first()), ja vaihda nykyistä kansiota ChDir komennolla.
7. Toista 1. - 6. kohtia kunnes kansio kokoelma on TYHJÄ.
(palauta aloituskansio muuttujasta chdir:llä)
8. selaa tiedosto kokelmaasi. :D

PS: mulla on valmiina kokonainen tiedoston etsintä kirjasto... En oo laittamassa koodia ennen kuin noita ohjeita on sovellettu..

Re: Tyhmät kysymykset

Posted: Sat Jun 06, 2009 8:23 am
by Guest
Onnistuuko kuvien laitto kovalevyltä peliin muulla tavalla kun että ensin lataat sen ja sitten asetat siihen? Jos tuo on ainut tyyli miten niitä kuvia saa ladattua muistiin monia?

Re: Tyhmät kysymykset

Posted: Sat Jun 06, 2009 11:41 am
by Awaclus
Vieras wrote:Jos tuo on ainut tyyli miten niitä kuvia saa ladattua muistiin monia?
Näin:

Code: Select all

kuva1 = LoadImage ("Media\cow.bmp")
kuva2 = LoadImage ("Media\car.bmp")

Re: Tyhmät kysymykset

Posted: Sat Jun 06, 2009 12:06 pm
by Jonez
Vieras wrote:Onnistuuko kuvien laitto kovalevyltä peliin muulla tavalla kun että ensin lataat sen ja sitten asetat siihen? Jos tuo on ainut tyyli miten niitä kuvia saa ladattua muistiin monia?
Täytyy vielä lisätä, kun ehdin tehdä tämän esimerkin.

Pakko ne kuvat on jossain välissä ladata, et voi piirtää UUSIA kuvia suoraan kovalevyltä. Voit kuitenkin luoda jo ladatusta kuvasta kopioita, ja se onkin suositeltavaa, koska kloonaaminen on paljon nopeampaa.

Tässä eri tapoja ladata ja hallita kuvia (tai muuta tietoa). Opettele tavat paremmin manuaalista (=loadimage(), cloneimage(), type - endtype, dim()). Muistipaloja (tapa 4) eivät aloittelijat tarvitse. Niiden väärinkäyttö saattaa tehdä hallaa koneellesi.

Code: Select all

SCREEN 1024, 768
FrameLimit 40
SAFEEXIT OFF

//TAPA 1
//Ladataan kolme ERILLISTÄ KUVAA eri muuttujanimille
kuva1 = LoadImage( "media\cow.bmp" )
kuva2 = LoadImage( "media\guy.bmp" )
kuva3 = LoadImage( "media\soldier.bmp" )

//TAPA 2
//Luodaan tyyppikokoelma
Type kuvat
    Field kuva
EndType

//Tehdään tyyppikokoelmaan kolme jäsentä, joista jokainen säilöö yhden kuvan.

uusiKuva.kuvat = New( kuvat ) //ensimmäinen jäsen
uusiKuva\kuva = LoadImage( "media\cow.bmp" ) //ensimmäinen kuva

uusiKuva.kuvat = New( kuvat ) //toinen jäsen
uusiKuva\kuva = LoadImage( "media\guy.bmp" ) //toinen kuva

uusiKuva.kuvat = New( kuvat ) //kolmas jäsen
uusiKuva\kuva = LoadImage( "media\soldier.bmp" ) //kolmas kuva

//TAPA 3
//Luodaan taulukko jossa on kolme solua. Jokainen solu säilöö kuvan
kuvamäärä = 2
Dim tauluKuvat( kuvamäärä )

tauluKuvat( 0 ) = LoadImage( "media\cow.bmp" ) //ensimmäinen solu, ensimmäinen kuva
tauluKuvat( 1 ) = LoadImage( "media\guy.bmp" ) //toinen solu, toinen kuva
tauluKuvat( 2 ) = LoadImage( "media\soldier.bmp" ) //kolmas solu, kolmas kuva

//TAPA 4
//luodaan 12 tavun muistipala (jokainen kuva vie 4 tavua, tavut 0-3, 4-7, 8-11)
memKuvat = MakeMEMBlock( 11 )
PokeInt memKuvat, 0, LoadImage( "media\cow.bmp" ) //ladataan ensimmäinen kuva
PokeInt memKuvat, 4, LoadImage( "media\guy.bmp" ) //toinen kuva
PokeInt memKuvat, 8, LoadImage( "media\soldier.bmp" ) //kolmas kuva

Repeat

    //TAPA 1
    //piirretään erilliset kuvat
    Text 0, 0, "Erilliset kuvat:"  
    DrawImage kuva1, 0, 20
    DrawImage kuva2, 100, 20
    DrawImage kuva3, 200, 20
    
    //TAPA 2
    //piirretään kuvat tyyppimuuttujilla
    Text 0, 80, "Tyyppikokoelma:"     
    laskuri = 0
    For jokaKuva.kuvat = Each kuvat
        DrawImage jokaKuva\kuva, 100 * laskuri, 100
        laskuri = laskuri + 1
    Next jokaKuva
    
    //TAPA 3
    //piirretään kuvat taulukon avulla
    Text 0, 180, "Taulukko:"    
    For i = 0 To kuvamäärä
        DrawImage tauluKuvat( i ), 100 * i, 200
    Next i
    
    //TAPA 4
    //piirretään muistipaloihin säilötyt kuvat
    Text 0, 280, "Muistipalat:"
    For i = 0 To 2
        DrawImage PeekInt( memKuvat, i * 4 ), 100 * i, 300
    Next i

    DrawScreen
Until EscapeKey()

//pooistetaan muistipalat muistista. (cb taitaa tehdä tämän itsestään)
DeleteMEMBlock memKuvat

Re: Tyhmät kysymykset (I/2009)

Posted: Sat Jun 06, 2009 12:45 pm
by Zero
Tämä ketju on kasvanut nyt niin isoksi, että ylläpito päätti pilkkoa sen.

Keskustelu jatkuu ketjussa Tyhmät kysymykset (II/2009).

*Lukko*