Tyhmät kysymykset (I/2009)

Voit pyytää apua ohjelmointiongelmiin täältä.
Guest

Re: Tyhmät kysymykset

Post by Guest » Thu Jun 04, 2009 4:12 pm

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ä.

User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Tyhmät kysymykset

Post by esa94 » Thu Jun 04, 2009 4:24 pm

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.

User avatar
Sly_Jack0
Devoted Member
Posts: 612
Joined: Mon Dec 10, 2007 9:25 am

Re: Tyhmät kysymykset

Post by Sly_Jack0 » Thu Jun 04, 2009 4:25 pm

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

User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Tyhmät kysymykset

Post by esa94 » Thu Jun 04, 2009 4:29 pm

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.

User avatar
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset

Post by phons » Thu Jun 04, 2009 4:34 pm

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.
Image

Guest

Re: Tyhmät kysymykset

Post by Guest » Thu Jun 04, 2009 4:42 pm

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.

soitin

Re: Tyhmät kysymykset

Post by soitin » Thu Jun 04, 2009 5:17 pm

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..

User avatar
phons
Guru
Posts: 1056
Joined: Wed May 14, 2008 10:11 am

Re: Tyhmät kysymykset

Post by phons » Thu Jun 04, 2009 5:38 pm

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. ;)
Image

Guest

Re: Tyhmät kysymykset

Post by Guest » Thu Jun 04, 2009 5:49 pm

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

cool-driver
Active Member
Posts: 116
Joined: Sat Feb 14, 2009 8:47 am

Re: Tyhmät kysymykset

Post by cool-driver » Fri Jun 05, 2009 8:54 am

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.
Projektit:
Ships Income Liikenne Suomesta Beta 2: valmis. Lataa tästä Projekti keskeytetty. Tehdään loppuun uuden CoolBasicin tulon jälkeen.
Diktaattori Beta 2: valmis. Lataa Tästä Projekti keskeytetty. Tehdään loppuun uuden CoolBasicin tulon jälkeen.

Barbe-Q Michael
Newcomer
Posts: 2
Joined: Wed Jun 03, 2009 4:36 pm

Re: Tyhmät kysymykset

Post by Barbe-Q Michael » Fri Jun 05, 2009 2:52 pm

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

User avatar
JATothrim
Tech Developer
Tech Developer
Posts: 606
Joined: Tue Aug 28, 2007 6:46 pm
Location: Kuopio

Re: Tyhmät kysymykset

Post by JATothrim » Fri Jun 05, 2009 10:07 pm

Ö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..
-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'.

Guest

Re: Tyhmät kysymykset

Post by Guest » Sat Jun 06, 2009 8:23 am

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?

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

Re: Tyhmät kysymykset

Post by Awaclus » Sat Jun 06, 2009 11:41 am

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")

User avatar
Jonez
Devoted Member
Posts: 575
Joined: Mon Aug 27, 2007 8:37 pm

Re: Tyhmät kysymykset

Post by Jonez » Sat Jun 06, 2009 12:06 pm

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

User avatar
Zero
Lead Developer
Lead Developer
Posts: 725
Joined: Sun Aug 26, 2007 2:30 pm
Location: Helsinki, Finland
Contact:

Re: Tyhmät kysymykset (I/2009)

Post by Zero » Sat Jun 06, 2009 12:45 pm

Tämä ketju on kasvanut nyt niin isoksi, että ylläpito päätti pilkkoa sen.

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

*Lukko*
CoolBasic henkilökuntaa
Johtava Suunnittelija
CoolBasic V3, CoolBasic Classic

http://www.coolbasic.com/blog

Locked