Page 1 of 1
aloittelijan ongelma!
Posted: Mon Dec 30, 2013 2:01 pm
by ToSSUNorSu
Hei! Olen täysin aloittelijakoodaaja ja latasin coolbasicin 2 pv sitten. Sitä ennen en ole koodannut joten kokemusta on tasan 2 pv
. Tutoriaalit tehtyäni päätin aloittaa ensimmäisen oman pelini tekemisen, joka on melkeimpä tutoriaalien yhdistelmä ja täysin alkeellinen verrattuna projekteista katsomiini peleihin. Tosin aloittelijalta ei muuta sovi toivoakkaan
. Nyt eteeni tuli kuitenkin ongelma. Olen laittanut musiikin, joka tietenkin loppuu aikanaan. Tutoriaaleissa oli yksi kappale "musiikit", jossa on ohjeet, miten äänen saa uudelleen käyntiin (soundplaying jne) Kun yritin laittaa sitä omaan koodiini, ruutuun tulee vain Memory access violation ilmoitus. Virhe on luultavasti rivillä 48. Missä voisi olla vika? Yritän saada lähdekoodini näkyviin, toivottavasti onnistuu
EDIT:Nyt toimii! Kiitos
Code: Select all
Type ammus
Field obj
End Type
FrameLimit 40
arial=LoadFont("arial", 30)
Color cbRed
SetFont arial
'lataukset:
Text 180,180,"Loading..."
DrawScreen
kartta = LoadMap ("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta, 0, 0, 1
pelaaja = LoadObject ("media\guy.bmp",360)
pati = LoadObject ("media\Bullet.bmp")
ShowObject pati,OFF
musiikki = LoadSound ("Media\SK_Battle2.mp3")
PlaySound musiikki
ampumisääni = LoadSound ("Media\Blaster.wav")
SetupCollision pelaaja, kartta, 1, 4, 2
' näppäimet:
Repeat
If LeftKey() Then TurnObject pelaaja, 3
If RightKey() Then TurnObject pelaaja, -3
If UpKey() Then MoveObject pelaaja, 3
If DownKey() Then MoveObject pelaaja, -3
If SoundPlaying(musiikki)=0 Then
musiikki = PlaySound ("Media\SK_Battle2.mp3")
Endif
If KeyDown (cbKeyRControl) And reload=0 Then
PlaySound ampumisääni
EndIf
luoti.ammus = New(ammus)
luoti\obj=CloneObject(pati)
SetupCollision luoti\obj, kartta, 2, 4, 1
CloneObjectPosition luoti\obj,pelaaja
CloneObjectOrientation luoti\obj,pelaaja
ResetObjectCollision luoti\obj
reload=5
EndIf
If reload>0 Then reload=reload-1
'Päivitä kaikki ammukset
For luoti.ammus = Each ammus
tuhoaLuoti = 0
MoveObject luoti\obj,6
If GetMap (2, ObjectX (luoti\obj), ObjectY(luoti\obj)) Then
tuhoaLuoti = 1
EndIf
If tuhoaLuoti
DeleteObject luoti\obj
Delete luoti
EndIf
Next luoti
CloneCameraPosition pelaaja
UpdateGame
DrawScreen
Forever
Re: aloittelijan ongelma!
Posted: Mon Dec 30, 2013 3:02 pm
by Ruuttu
Näin se toimii:
Code: Select all
musiikki = LoadSound("Media\SK_Battle2.mp3")
toisto = PlaySound(musiikki)
Repeat
If SoundPlaying(toisto) = 0 Then
toisto = PlaySound(musiikki)
EndIf
DrawScreen
Forever
Kuten manuaali kertoo, SoundPlaying haluaa parametriksi "kanavamuuttujan, jonka sait PlaySound-funktiolta".
Mutta,
kun on kyse taustamusiikista, ääntä ei oikeastaan kannattaisi ladata muistiin LoadSoundilla, vaan se kannattaisi "streamata" suoraan kovalevyltä, näin:
Code: Select all
toisto = PlaySound("Media\SK_Battle2.mp3")
Repeat
If SoundPlaying(toisto) = 0
toisto = PlaySound("Media\SK_Battle2.mp3")
EndIf
DrawScreen
Forever
Yrität käyttää koodissasi ikäänkuin kumpaakin tapaa, lataat äänen, mutta myös toistat sitä suoraan kovalevyltä.
Re: aloittelijan ongelma!
Posted: Tue Dec 31, 2013 7:01 pm
by ToSSUNorSu
Edellinen ongelma on nyt takana ja uusi ongelma edessä... Oman kuva lisääminen koodiin ei onnistu
tämä ongelma ilmeni jo tutoriaaleissa, mutta jätin sen sikseen. Nyt se tuli kuitenkin vastaan ja joudun kysymään apua taas täältä. Eli kun suoritan komennon sotilas = LoadObject ("Esimkansio\omakuva.bmp"). se käynnistää pelin oikein, mutta sitten tulee ilmoitus can't load object. Yritin tallentaa kuvaa jopa pelin mukana tulleeseen media- kansioon, mutta sama ongelma. Musiikeilla ja muilla objecteilla sama ongelma. Eli Viisaat: Kertokaas, mikä voisi olla ongelmana
Re: aloittelijan ongelma!
Posted: Tue Dec 31, 2013 7:44 pm
by Ruuttu
Suhteellisiin tiedostopolkuihin vaikuttaa, mistä kansiosta ohjelmasi ajetaan. Tallentamattomalla projektilla se on CoolBasicin asennushakemisto, tallennetulla projektilla ajettavan kooditiedoston hakemisto.
Voit laittaa koodisi alkuun tämän,
Code: Select all
Print CurrentDir()
StartSearch
count = 0
Repeat
file$=FindFile()
If file$="" Then Exit
count + 1
Print file$
If count > 20 Then WaitKey
Forever
EndSearch
WaitKey
ja näet, missä hakemistossa ohjelmasi pyörii, ja mitä tiedostoja ja kansioita se näkee.
Re: aloittelijan ongelma!
Posted: Wed Jan 01, 2014 4:02 pm
by ToSSUNorSu
Kiitos tuosta koodista, se auttoi paljon ja viestisi selvensi muutenkin tilannetta. Kun lisäsin yhden tietokoneeni valmiista kuvista kyseiseen kansioon se toimi hyvin. Mutta Gimpillä tekemäni muunnos soldierista ei toimi. Tallensin kuvani Gimpillä bmp muotoon ja lisäsin samaan kansioon, jossa edellinen kuvani toimi. Mutta silti tulee ilmoitus ''can't load image soldier2'' joksi nimesin siis kuvani. Mikä voisi olla vialla?
PS. Toivottavasti viestistä saa jtn selvää
Re: aloittelijan ongelma!
Posted: Wed Jan 01, 2014 4:29 pm
by Ruuttu
GIMP tuottaa oletuksena sellaisia BMP-tiedostoja, että CoolBasic ei osaa niitä avata. Voit korjata tämän valitsemalla tallennuksen yhteydessä yhteensopivuusasetuksista ("Compatibility Options"), että tiedosto luodaan ilman väriprofiilia ("Do not write color space information").
BMP ei pakkaa kuvia hyvin, tai ollenkaan, ja tiedostot saattavat paisua järjettömän kokoisiksi. Kannattaa siksi tutustua myös PNG ja JPEG -muotoihin.
Re: aloittelijan ongelma!
Posted: Wed Jan 01, 2014 5:10 pm
by ToSSUNorSu
Kiitos aktiivisesta avusta. Se on auttanut todella paljon. Nyt tähänmennessä kaikki toimii. Kiitos myös vinkistä tallennusmuodon suhteen. Rupenkin heti tutkimaan niitä
Jätän nyt kuintenkin pelin tekemisen sikseen ja lähinnä testailen erilaisia koodi ''viritelmiä". Hyvää uuttavuotta!
Re: aloittelijan ongelma!
Posted: Wed Feb 05, 2014 4:26 pm
by ToSSUNorSu
Jatkan nyt tähän, kun uskon, että uuden ketjun aloittaminen olisi turhaa. Eli olen tekemässä projektia, josta saattaa tulla koulutyöni, jos se onnistuu. Eli kyseessä olisi yksinkertainen "testi" tekijänoikeuslain osaamisesta. Peliin voi tulla myös lisäominaisuuksia, joita olen jo hieman suunnitellut. Koodin voisi varmasti tehdä yksinkertaisemmin, mutta haluan sen pysyvän yksinkertaisena, jotta osaisin selittää sen itse. Nyt eteen tuli kuitenkin ongelma. Valikko toimii hyvin, mutta kun aloittaa pelin, ensimmäinen kysymys toimii hyvin, mutta kun painaa vastauksen, niin peli hyppääkin koodin loppuun. Mikä voisi olla vialla? Ps. Pelissä on itsetehtyjä kuvia, joten koodia ei voi ajaa. Muokatkaa koodia tai vastatkaa lukemisen perusteella
EDIT:Nyt toimii. Kiitos nopeasta vastauksesta
Code: Select all
SCREEN 600, 400
taulu=LoadImage ("media\taulu.bmp")
tausta=LoadImage ("media\pelin tausta.bmp")
valikko:
Repeat
ClearText
DrawImage taulu, 0, 0
Color cbwhite
Locate 200, 150
AddText "Paina P aloittaaksesi"
AddText ""
AddText "Paina E lopettaaksesi"
AddText ""
AddText "Paina T nähdäksesi tekijät"
If KeyHit (cbkeyp) Then Goto peli 'tämä toimii kai nyt
If KeyHit (cbkeye) Then End
If KeyHit (cbkeyt) Then Gosub tekijät
DrawScreen
Forever
'-----------------------------------------------------------------------
tekijät:
Repeat
ClearText
Locate 30, 30
AddText "Koodaaja: Tommi"
AddText ""
AddText "Musiikki:"
AddText ""
AddText "Palaa valikkoon painamalla V"
If KeyHit (cbkeyv) Then Goto valikko
DrawScreen
Forever
'---------------------------------------------------------------------------
peli:
Repeat
pisteet=0
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 35, 35
AddText "Saan ottaa kuvahausta kuvan työhöni"
AddText ""
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"
If KeyHit (cbkey1) Then pisteet=pisteet+0
Goto kysymys2
If KeyHit (cbkey2) Then pisteet=pisteet+1
Goto kysymys2
DrawScreen
Forever
'--------------------------------------------------------------------------
kysymys2:
Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "Saan julkaista kaveristani kuvan ilman "
AddText "hänen lupaansa"
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"
If KeyHit (cbkey1) Then pisteet=pisteet+0
Goto kohta3
If KeyHit (cbkey2) Then pisteet=pisteet+1
Goto kohta3
If KeyHit (cbkeyz) Then Goto kohta3
DrawScreen
Forever
'-----------------------------------------------------------------------------
kohta3:
Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "saan julkaista nettisivullani sheakspearen runon"
AddText ""
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"
If KeyHit (cbkey1) Then pisteet=pisteet+1 : Goto kohta4
If KeyHit (cbkey2) Then pisteet=pisteet+0 : Goto kohta4
If KeyHit (cbkeyz)Then Goto kohta4
DrawScreen
Forever
'------------------------------------------------------------------------------------
kohta4:
Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "saan kopioida omaan toisen kuvan omaan käyttööni"
AddText ""
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"
If KeyHit (cbkey1) Then pisteet=pisteet+1 : Goto kohta5
If KeyHit (cbkey2) Then pisteet=pisteet+0 : Goto kohta5
If KeyHit (cbkeyz)Then Goto kohta5
DrawScreen
Forever
'------------------------------------------------------------------------------
kohta5:
Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "Saan ladata youtubesta musiikkia, jota käytän"
AddText "julkisesti levitettävässä pelissä"
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"
If KeyHit (cbkey1) Then pisteet=pisteet+0 : Goto loppu
If KeyHit (cbkey2) Then pisteet=pisteet+1 : Goto loppu
If KeyHit (cbkeyz)Then Goto loppu
DrawScreen
Forever
'---------------------------------------------------------------------------------
loppu:
Repeat
ClearText
DrawImage tausta, 0, 0
If pisteet<3 Then
Locate 30, 30
AddText "Mediataitosi ovat ruosteessa. kertaa vielä"
AddText ""
ElseIf pisteet>2 And pisteet<5 Then
Locate 30, 30
AddText "Mediataitosi ovat keskitasoa. Vielä voi parantaa"
AddText ""
ElseIf pisteet<6 Then
Locate 30, 30
AddText "Mediataitosi ovat mahtavat. Osaat kaiken"
AddText ""
EndIf
Locate 40, 40
AddText "Palaa valikkoon painamalla B"
If KeyHit (cbkeyb) Then Goto valikko
DrawScreen
Forever
Re: aloittelijan ongelma!
Posted: Wed Feb 05, 2014 4:35 pm
by Latexi95
ToSSUNorSu wrote:Jatkan nyt tähän, kun uskon, että uuden ketjun aloittaminen olisi turhaa. Eli olen tekemässä projektia, josta saattaa tulla koulutyöni, jos se onnistuu. Eli kyseessä olisi yksinkertainen "testi" tekijänoikeuslain osaamisesta. Peliin voi tulla myös lisäominaisuuksia, joita olen jo hieman suunnitellut. Koodin voisi varmasti tehdä yksinkertaisemmin, mutta haluan sen pysyvän yksinkertaisena, jotta osaisin selittää sen itse. Nyt eteen tuli kuitenkin ongelma. Valikko toimii hyvin, mutta kun aloittaa pelin, ensimmäinen kysymys toimii hyvin, mutta kun painaa vastauksen, niin peli hyppääkin koodin loppuun. Mikä voisi olla vialla? Ps. Pelissä on itsetehtyjä kuvia, joten koodia ei voi ajaa. Muokatkaa koodia tai vastatkaa lukemisen perusteella
Code: Select all
SCREEN 600, 400
taulu=LoadImage ("media\taulu.bmp")
tausta=LoadImage ("media\pelin tausta.bmp")
valikko:
Repeat
ClearText
DrawImage taulu, 0, 0
Color cbwhite
Locate 200, 150
AddText "Paina P aloittaaksesi"
AddText ""
AddText "Paina E lopettaaksesi"
AddText ""
AddText "Paina T nähdäksesi tekijät"
If KeyHit (cbkeyp) Then Goto peli 'tämä toimii kai nyt
If KeyHit (cbkeye) Then End
If KeyHit (cbkeyt) Then Gosub tekijät
DrawScreen
Forever
'-----------------------------------------------------------------------
tekijät:
Repeat
ClearText
Locate 30, 30
AddText "Koodaaja: Tommi"
AddText ""
AddText "Musiikki:"
AddText ""
AddText "Palaa valikkoon painamalla V"
If KeyHit (cbkeyv) Then Goto valikko
DrawScreen
Forever
'---------------------------------------------------------------------------
peli:
Repeat
pisteet=0
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 35, 35
AddText "Saan ottaa kuvahausta kuvan työhöni"
AddText ""
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"
If KeyHit (cbkey1) Then Goto kysymys2
DrawScreen
Forever
'--------------------------------------------------------------------------
kysymys2:
Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "Saan julkaista kaveristani kuvan ilman "
AddText "hänen lupaansa"
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"
If KeyHit (cbkey1) Then pisteet=pisteet+0 : Goto kohta3
If KeyHit (cbkey2) Then pisteet=pisteet+1 : Goto kohta3
If KeyHit (cbkeyz) Then Goto kohta3
DrawScreen
Forever
'-----------------------------------------------------------------------------
kohta3:
Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "saan julkaista nettisivullani sheakspearen runon"
AddText ""
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"
If KeyHit (cbkey1) Then pisteet=pisteet+1 : Goto kohta4
If KeyHit (cbkey2) Then pisteet=pisteet+0 : Goto kohta4
If KeyHit (cbkeyz)Then Goto kohta4
DrawScreen
Forever
'------------------------------------------------------------------------------------
kohta4:
Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "saan kopioida omaan toisen kuvan omaan käyttööni"
AddText ""
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"
If KeyHit (cbkey1) Then pisteet=pisteet+1 : Goto kohta5
If KeyHit (cbkey2) Then pisteet=pisteet+0 : Goto kohta5
If KeyHit (cbkeyz)Then Goto kohta5
DrawScreen
Forever
'------------------------------------------------------------------------------
kohta5:
Repeat
ClearText
DrawImage tausta, 0, 0
AddText "pisteet"+pisteet
Locate 30, 30
AddText "Saan ladata youtubesta musiikkia, jota käytän"
AddText "julkisesti levitettävässä pelissä"
AddText "1. Kyllä saan"
AddText ""
AddText "2. En saa"
If KeyHit (cbkey1) Then pisteet=pisteet+0 : Goto loppu
If KeyHit (cbkey2) Then pisteet=pisteet+1 : Goto loppu
If KeyHit (cbkeyz)Then Goto loppu
DrawScreen
Forever
'---------------------------------------------------------------------------------
loppu:
Repeat
ClearText
DrawImage tausta, 0, 0
If pisteet=1 Or pisteet=2 Then
Locate 30, 30
AddText "mediataitosi ovat ruosteessa. kertaa vielä"
ElseIf pisteet=3 Or pisteet=4 Then
Locate 30, 30
AddText "Mediataitosi ovat keskitasoa. Vielä voi parantaa"
ElseIf pisteet=5 Then
Locate 30, 30
AddText "Mediataitosi ovat mahtavat. Osaat kaiken"
EndIf
Locate 40, 40
AddText "Palaa valikkoon painamalla B"
If KeyHit (cbkeyb) Then Goto valikko
DrawScreen
Forever
KeyHit/KeyDown/KeyUp päivitetään DrawScreenin yhteydessä. Kun painat nappia, pompataan seuraavaan kysymykseen, mutta koska DrawScreeniä ei olla kutsuttu välissä KeyHit palauttaa yhä True. Joten taas pompataan seuraavaan kysymykseen jne. Lisää ClearKeys komento labeleiden jälkeen, että KeyHitin arvo resetoituu.