Page 4 of 154
Re: Tyhmät kysymykset
Posted: Fri Sep 14, 2007 2:26 pm
by vieras
Jälleen tuli propleema tuossa hahmonluontijutussa.
Code: Select all
Type hahmo
Field A
End Type
hahmo.hahmo = New(hahmo)
hahmo\A=10
Repeat
Text 10,10,"A: "+hahmo\A
add_loota(100,100,hahmo\A)
DrawScreen
Forever
Function add_loota(x,y,z)
Color cbred
Box x,y,40,15,0
Color cbwhite
CenterText x+20,y+1, "LESS"
Color cbyellow
If MouseX()>=x And MouseX()<=x+40 And MouseY()>=y And MouseY()<=y+20 Then
Box x+2,y+2,36,13,0
If MouseHit(1) Then
z=z-1
If z<3 Then
z=z+1
EndIf
EndIf
EndIf
End Function
Saan vastaavan toiminnon kyllä toimimaan, jossei tuo vähennysloota ole funktio vaan pääsilmukan sisällä, mutta näin en saa sitä pelaaman en sitten millään. Jos joku viitsii hiukan avittaa, olen enemmän kuin kiitollinen.
Re: Tyhmät kysymykset
Posted: Fri Sep 14, 2007 2:37 pm
by koodaaja
vieras wrote:Jälleen tuli propleema tuossa hahmonluontijutussa.
Code: Select all
Type hahmo
Field A
End Type
hahmo.hahmo = New(hahmo)
hahmo\A=10
Repeat
Text 10,10,"A: "+hahmo\A
add_loota(100,100,hahmo\A)
DrawScreen
Forever
Function add_loota(x,y,z)
Color cbred
Box x,y,40,15,0
Color cbwhite
CenterText x+20,y+1, "LESS"
Color cbyellow
If MouseX()>=x And MouseX()<=x+40 And MouseY()>=y And MouseY()<=y+20 Then
Box x+2,y+2,36,13,0
If MouseHit(1) Then
z=z-1
If z<3 Then
z=z+1
EndIf
EndIf
EndIf
End Function
Saan vastaavan toiminnon kyllä toimimaan, jossei tuo vähennysloota ole funktio vaan pääsilmukan sisällä, mutta näin en saa sitä pelaaman en sitten millään. Jos joku viitsii hiukan avittaa, olen enemmän kuin kiitollinen.
Ei tietenkään toimi. Katsos, tuo z tuolla funkkarin sisällä ei ole sama kuin tuo hahmo\A. Se on hahmo\A:n kopio, joka saa toki saman arvon, mutta tämä kopio tuhotaan, eikä sen arvo vaikuta alkuperäiseen. Ratkaisu on käyttää tuota alkuperäistä tyypin jäsentä funkkarissa, kas näin:
Code: Select all
Type hahmo
Field A
End Type
h.hahmo = New(hahmo)
h\A=10
Repeat
Text 10,10,"A: "+h\A
add_loota(100,100,ConvertToInteger(h))
DrawScreen
Forever
Function add_loota(x,y,id)
h.hahmo = ConvertToType(id)
Color cbred
Box x,y,40,15,0
Color cbwhite
CenterText x+20,y+1, "LESS"
Color cbyellow
If MouseX()>=x And MouseX()<=x+40 And MouseY()>=y And MouseY()<=y+20 Then
Box x+2,y+2,36,13,0
If MouseHit(1) Then
h\A=h\A-1
If h\A<3 Then
h\A=h\A+1
EndIf
EndIf
EndIf
End Function
Ja pari koodiin liittyvää asiaa: Älä käytä tyypin jäsenen nimenä tyypin nimeä. Syy: muuten converttointeger sekoaa. Äläkä (mieluusti) käytä muuttujaa z mihinkään muuhun kuin z-koordinaatin merkkaamiseen. Nämä menevät muuten helposti sekaisin.
Re: Tyhmät kysymykset
Posted: Fri Sep 14, 2007 2:50 pm
by vieras
Ahaa! Kiitän selvennyksestä.
Mutta sitten on vielä sellanen, että todellisuudessa tyyppiin tulee useampi kenttä ja yhden funktion tulee ajaa jokaisen kentän vähennys; mitä muuttujaa käyttää tällöin?
Oon aika kujalla näistä hommista.
Re: Tyhmät kysymykset
Posted: Fri Sep 14, 2007 3:48 pm
by elmo123
Ahaa! Kiitän selvennyksestä.
Mutta sitten on vielä sellanen, että todellisuudessa tyyppiin tulee useampi kenttä ja yhden funktion tulee ajaa jokaisen kentän vähennys; mitä muuttujaa käyttää tällöin?
Oon aika kujalla näistä hommista.
sitä samaa h-muuttujaa.
Mulla on ongelma aseen latauspalkissa: aseena on haulikko, jossa 5 patia. Joka padin välillä on lataus 60, ja jos padit loppui, lataus on 400. Latauspalkki on 100px leveä, niin millä laskutoimituksella saan selville, minkä levyinen on latauspalkin sisällä oleva palkki?
selvemmin:
Code: Select all
'latauspalkki
'väri
Color cbBlue
If reload Then Color cbBlackSkin
Box 250,38,*joku laskutoimitus*,15
'reunus
Color 0,0,0
Box 250,38,100,15,OFF
Re: Tyhmät kysymykset
Posted: Fri Sep 14, 2007 8:21 pm
by Zrazy_Coder
Väsäsin ihan muuten vaan, kun halusin koittaa funktion tekoa, mutta ei onnistu
Tein näin
Code: Select all
FrameLimit 40
guy= LoadObject("Media\guy.bmp", 72)
Repeat
kiihtyvyys(car,1.5,1.0,20,0)
DrawScreen
Forever
Function kiihtyvyys(objekti,kiihtyvyys$,pakki$,maxnopeus,nopeus$)
If UpKey() Then nopeus + kiihtyvyys
If DownKey() Then nopeus - pakki
If KeyDown(cbkeyspace) And nopeus$=>1 Then nopeus$-pakki
MoveObject objekti,nopeus
EndFunction
Jokanen rivi on kait väärin koodattu kun koitin toimiiko mikään riveista niin ei toiminu. Mikäköhän on vääri ?
Re: Tyhmät kysymykset
Posted: Fri Sep 14, 2007 9:11 pm
by regalis
Virheilmoitus johtui siitä, että funktion nimi on sama kuin kiihtyvyys-muuttujan. Muuttamalla joko funktion tai muuttujan nimen pitäisi toimia:
Code: Select all
FrameLimit 40
guy= LoadObject("Media\guy.bmp", 72)
Repeat
KiihtyvyysFunktio(car,1.5,1.0,20,0)
DrawScreen
Forever
Function KiihtyvyysFunktio(objekti,kiihtyvyys#,pakki#,maxnopeus,nopeus#)
If UpKey() Then nopeus = nopeus + kiihtyvyys
If DownKey() Then nopeus = nopeus - pakki
If KeyDown(cbkeyspace) And nopeus=>1 Then nopeus = nopeus - pakki
MoveObject objekti, nopeus
EndFunction
En oikein tajunnut, miksi kiihtyvyys, pakki ja nopeus -muuttujat ovat merkkijonomuuttujia, vaikka niihin tallennetaan numeroita. Jos tarkoituksesi oli tehdä niistä desimaalimuuttujia, laita perään #-merkki.
Re: Tyhmät kysymykset
Posted: Fri Sep 14, 2007 9:56 pm
by Zrazy_Coder
Muistin että siinä piti olla perässä $ eikä #. Noh nyt tiedän miksi se ei suostunut edes nimiä näyttää, kun oli väärät merkit perässä
Re: Tyhmät kysymykset
Posted: Sat Sep 15, 2007 11:05 am
by koodaaja
elmo123:
Lasket, kuinka paljon on yhden kudin leveys ja kerrot sen kudien määrällä.
Itse tosin tekisin homman näinkin eliitisti (hienoista purkkaa siellä täällä, mutta lopputulos on komia):
Code: Select all
Const maxkutimäärä = 5
kudit = maxkutimäärä
Const lipaslatausaika = 400
Const kutilatausaika = 50
ClsColor 255, 255, 255
Repeat
If KeyHit(57) And ajastin<Timer() Then
If kudit = 0 Then
ajastin = Timer()+lipaslatausaika
lipaslatautuu = True
ajastin2 = Timer()+lipaslatausaika/maxkutimäärä
Else
ajastin = Timer()+kutilatausaika
kudit = kudit - 1
EndIf
EndIf
If lipaslatautuu And ajastin2<Timer() Then
kudit = kudit + 1
ajastin2 = Timer()+ lipaslatausaika/maxkutimäärä
If kudit = maxkutimäärä Then lipaslatautuu = False
EndIf
Color 100, 100, 100
Box 250,38,101,15
Color 0, 0, 0
Box 250, 38, 101, 15, OFF
For i = 0 To kudit-1
Color 255, 255, 0
Box 251+i*(100/maxkutimäärä), 39, (100/maxkutimäärä)-1, 13
Color 200, 200, 0
Box 251+i*(100/maxkutimäärä), 39, (100/maxkutimäärä)-1, 13, OFF
Next i
DrawScreen
Forever
regalis: tuo mavittaa, vaihda objektin nimi funkkarikutsusta car->guy. Tai Zrazy Coderin koodiahan se alunperin on ;D
Re: Tyhmät kysymykset
Posted: Sat Sep 15, 2007 7:50 pm
by regalis
Nyt tulee todella tyhmä kysymys: miten saan saman tyypin jäsenet kääntymään toisiaan kohti? ^^
Minulla on siis SOTILAS-type, jossa on puoli-field. Jos puoli on 1, sotilaan on käännyttävä niitä kohti, joiden puoli on 2. Ja toisinpäin.
Re: Tyhmät kysymykset
Posted: Sat Sep 15, 2007 8:32 pm
by koodaaja
regalis wrote:Nyt tulee todella tyhmä kysymys: miten saan saman tyypin jäsenet kääntymään toisiaan kohti? ^^
Minulla on siis SOTILAS-type, jossa on puoli-field. Jos puoli on 1, sotilaan on käännyttävä niitä kohti, joiden puoli on 2. Ja toisinpäin.
Niitä kohti? Jos sinulla on enemmän kuin kaksi kumpaakin, joudut laskemaan keskiarvon, jota kohti käännät ukon. Ellet tarkoita, että puolet katsoo vasemmalle ja puolet oikealle?
Re: Tyhmät kysymykset
Posted: Sat Sep 15, 2007 9:06 pm
by Zrazy_Coder
Miten saisin ton mun auton kiihtymään siinä mun kiihdytys funktiossa , kun yritin saada että se kiihtyis mutta ei se kiihdy vaan se menee siihen nopeuteen jolla suurrennetaa auto nopeutta eli
Code: Select all
Function kiihtyvyys(objekti,kiihtyvyys$,pakki$,maxnopeus,nopeus$)
If UpKey() Then nopeus + kiihtyvyys
If DownKey() Then nopeus - pakki
If KeyDown(cbkeyspace) And nopeus$=>1 Then nopeus$-pakki
MoveObject objekti,nopeus
EndFunction
Toi mun auto liikkuu vaa niin kovaa , kun toi kiihtyvyys on eli jos mä laitan että kiihtyvyys on 4 ja nii auto liikkuu vaa neljää eikä kiihdy sillei , kun pitäs
Kukaa ei saanu selvää
Re: Tyhmät kysymykset
Posted: Sat Sep 15, 2007 9:08 pm
by regalis
Tarkoitan sitä, että vastapuolen sotilaat ovat puoli 1, ja oman puolen sotilaat ovat puoli 2. Minun pitäisi saada ne osoittamaan toisiaan (siis esimerkiksi niin, että jokainen sotilas katsoo lähintä vihollissotilasta).
Re: Tyhmät kysymykset
Posted: Sat Sep 15, 2007 9:10 pm
by koodaaja
Zrazy_Coder wrote:Miten saisin ton mun auton kiihtymään siinä mun kiihdytys funktiossa , kun yritin saada että se kiihtyis mutta ei se kiihdy vaan se menee siihen nopeuteen jolla suurrennetaa auto nopeutta eli
Code: Select all
Function kiihtyvyys(objekti,kiihtyvyys$,pakki$,maxnopeus,nopeus$)
If UpKey() Then nopeus + kiihtyvyys
If DownKey() Then nopeus - pakki
If KeyDown(cbkeyspace) And nopeus$=>1 Then nopeus$-pakki
MoveObject objekti,nopeus
EndFunction
Toi mun auto liikkuu vaa niin kovaa , kun toi kiihtyvyys on eli jos mä laitan että kiihtyvyys on 4 ja nii auto liikkuu vaa neljää eikä kiihdy sillei , kun pitäs
Kukaa ei saanu selvää
No ei todellakaan saanut. Siis se menee sitä kiihtyvyyden nopeutta? Siis 4 pikseliä sekunnissa? Niin, tottakai se menee. Katsos, sinun pitää lisätä kiihtyvyyttä vähemmän kerralla, vaikka 0.2. Mutta kuten sanottu, funktiossa kyseessä on vain kopio muuttujasta, joten "nopeus"-muuttujan arvoa ei pääloopissa muuteta, jolloin se nollautuu. Kirjoita siis ennen looppia "Global nopeus", ja ongelman pitäisi ratketa. Silloin se näkyy automaagisesti funktiossa, etkä tarvitse parametriä nopeus.
Regalis: pseudoa:
Code: Select all
joka ukolle
tarkista puoli
tee temp-muuttuja etäisyyksiä varten, aseta arvoksi suuri luku, esim 1000
temp-muuttuja myös vihollisobjektia varten
käy vastapuoli läpi
jos nykyisen vihun etäisyys pienempi kuin temp, tallenna temp-muuttujiin etäisyys ja objekti
seuraava
osoita temp-objektiin
ammu(?)
seuraava
Re: Tyhmät kysymykset
Posted: Sat Sep 15, 2007 9:36 pm
by regalis
koodaaja wrote:
Code: Select all
joka ukolle
tarkista puoli
tee temp-muuttuja etäisyyksiä varten, aseta arvoksi suuri luku, esim 1000
temp-muuttuja myös vihollisobjektia varten
käy vastapuoli läpi
jos nykyisen vihun etäisyys pienempi kuin temp, tallenna temp-muuttujiin etäisyys ja objekti
seuraava
osoita temp-objektiin
ammu(?)
seuraava
Miten tuon vastapuolen läpikäymisen voi toteuttaa? Jos laittaa siihen for each-loopin, tulee MAV.
Re: Tyhmät kysymykset
Posted: Sat Sep 15, 2007 9:39 pm
by koodaaja
regalis wrote:koodaaja wrote:
Code: Select all
joka ukolle
tarkista puoli
tee temp-muuttuja etäisyyksiä varten, aseta arvoksi suuri luku, esim 1000
temp-muuttuja myös vihollisobjektia varten
käy vastapuoli läpi
jos nykyisen vihun etäisyys pienempi kuin temp, tallenna temp-muuttujiin etäisyys ja objekti
seuraava
osoita temp-objektiin
ammu(?)
seuraava
Miten tuon vastapuolen läpikäymisen voi toteuttaa? Jos laittaa siihen for each-loopin, tulee MAV.
Et tokikaan voi käyttää samaa muuttujanimeä niille instansseille, eli for x.TYYPPI -silmukan sisässä ei saisi olla toista for x.TYYPPIä, toiselle pitää keksiä eri nimi, vaikka y.TYYPPI.
Re: Tyhmät kysymykset
Posted: Mon Sep 17, 2007 7:17 am
by Vieras :>
Voikos tällä coolbasicilla tehdä niin, että tämä piirtäisi kuvan näytölle ilman tuota ikkunaa?
Siis että kuva vaan ilmestyisi keskelle näyttöä ja itse ikkunaa ei näkyisi.
Re: Tyhmät kysymykset
Posted: Mon Sep 17, 2007 7:55 am
by Harakka
Vieras :> wrote:Voikos tällä coolbasicilla tehdä niin, että tämä piirtäisi kuvan näytölle ilman tuota ikkunaa?
Siis että kuva vaan ilmestyisi keskelle näyttöä ja itse ikkunaa ei näkyisi.
Ei onnistu.
Re: Tyhmät kysymykset
Posted: Mon Sep 17, 2007 1:30 pm
by koodaaja
Vieras :> wrote:Voikos tällä coolbasicilla tehdä niin, että tämä piirtäisi kuvan näytölle ilman tuota ikkunaa?
Siis että kuva vaan ilmestyisi keskelle näyttöä ja itse ikkunaa ei näkyisi.
Fullscrööni päälle ja piirrät sen kuvan keskelle näyttöä ;D ei näy ikkunan reunoja, vaan eipä näy takana olevatkaan ikkunat. Ei kyllä taida CB:llä onnistua.
Öfftöpik:
Mitäs SCREEN() muuten palauttaa? Saisiko siltä kenties ehdan HWND -pointterin tms.? (Zerolta olen kysynyt, mutta hän tuntuu jälleen kadonneen..) Sittenhän voisi GetWindowLongilla kaivaa instancen ja sen jälkeen ei olisi riemulla rajaa ;D
Re: Tyhmät kysymykset
Posted: Mon Sep 17, 2007 5:03 pm
by Vieras taas :>
Harmi sinänsä
Millähän ohjelmalla tämän voisi toteuttaa?
vaikkei tämä ClooBasicin foorumeille kuulukkaan : P
Re: Tyhmät kysymykset
Posted: Tue Sep 18, 2007 3:15 pm
by koodaaja
Vieras taas :> wrote:Harmi sinänsä
Millähän ohjelmalla tämän voisi toteuttaa?
vaikkei tämä ClooBasicin foorumeille kuulukkaan : P
Ei millään ohjelmalla. Ohjelmointikielellä kylläkin ;D C++:lla onnistuu, windows.h:sta ja windowsx.h:sta löytyvillä funkkareilla. Saat määritellä kaiken itse, taustaväristä otsikkoon ( tai jättää otsikkopalkin ja ikkunaa ympäröivän palkin pois, kuten halusit ). Tai tehdä ikkunan sisään vaikka viisi uutta. Eri asia sitten, että siinä missä CB luo ikkunan ( tai pikemminkin muokkaa vanhaa ;D ) 1 rivissä, saat C++:lla uhrata asialle monta kymmentä, etenkin, jos haluat sille oman laitekontekstin ja käyttää siinä vaikka DirectX:ää tai OpenGL:ää. Näiden käyttö taas menee vaikeaksi. SDL voisi myös olla pätevä ratkaisu, huomattavasti helpompaa. Vaan silläpä ei saakaan enää kustomoitua sellaista ikkunaa kun haluaa. Ihan vinkkinä; kannattaa unohtaa koko juttu. Ohjelmoi ensin vuosi pari CB:llä, mieti sitten vaikeampaan siirtymistä. Ja siihen mennessä unohdat jo, miksi halusit kuvan keskelle näyttöä ;D