minulla on pieni ongelma
minulla on pieni ongelma
tein hyvän peli joka on vielä kesken , siinä on kana(hirviö) ja ihminen joka juoksee karkuun kanaa , tarkoitukseni oli kun kana törmää ihmiseen se katoaa ?
mutta miten se koodataan , silleen että kun kana on kerran törmännyt siihen se katoaa pelistä. vain tämä enään niin pelini on valmis sanokaa jos ette ymmärtäneet kaikkea.
Peli on Ylhäältä kuvattu
mutta miten se koodataan , silleen että kun kana on kerran törmännyt siihen se katoaa pelistä. vain tämä enään niin pelini on valmis sanokaa jos ette ymmärtäneet kaikkea.
Peli on Ylhäältä kuvattu
Last edited by rami123 on Mon Jun 23, 2008 10:07 pm, edited 1 time in total.
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: minulla on pieni ongelma
Ovatko törmäävät asiat objekteja?
Mistä suunnasta peli on kuvattu? Jos melkein 3D, niin haluatko törmäyksen tapahtuvan sijainnin määrittävillä muuttujilla vai overlapeilla?
Mistä suunnasta peli on kuvattu? Jos melkein 3D, niin haluatko törmäyksen tapahtuvan sijainnin määrittävillä muuttujilla vai overlapeilla?
Last edited by Koodiapina on Mon Jun 23, 2008 9:57 pm, edited 1 time in total.
Re: minulla on pieni ongelma
Jos kana ja ihminen ovat objekteja, tämän pitäisi riittää.
Ensimmäisellä rivillä tarkistetaan siis ovatko nämä objektit päällekkäin (pelissäsi niillä saattaa olla eri nimet, joten ne kannattaa tarkastaa). Jos ne ovat, siirrytään seuraavalle riville (muutoin hypätään EndIf-rivin jälkeiselle riville) ja piilotetaan kana. Objektia ei oikeasti poisteta vaan sitä ei enää piirretä eikä sen törmäyksiä tarkasteta.
Code: Select all
If ObjectsOverlap(kana,ihminen) Then
ShowObject kana,OFF
EndIf
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Re: minulla on pieni ongelma
Saanko nauraa?
Re: minulla on pieni ongelma
ihmisen oli tarkoitus kadota , kana on se hirviö näytän kuvan jos voin , samoin pelin mihin lisään tuon tekstin ja mitä muokkaan siitä?
Re: minulla on pieni ongelma
Kannattaisi lukea ne manuaalit.rami123 wrote:ihmisen oli tarkoitus kadota , kana on se hirviö näytän kuvan jos voin , samoin pelin mihin lisään tuon tekstin ja mitä muokkaan siitä?
Re: minulla on pieni ongelma
kun lisäsin tuon teksin repeatin jälkeen , tuli error ja memory access violatin miten nyt?
Re: minulla on pieni ongelma
Memory acces violation(eli MAV) tulee esim. kun yrität käsitellä objectia jota ei ole olemassakaan. Katsoppa mitkä nimet olet kanalle ja ihmiselle pistänyt,ja korvaa tuon koodin kana ja ihminen niillä
Hieman voisit itsekin ajatella
Hieman voisit itsekin ajatella
Huuda mun ip:tä!
-
- Active Member
- Posts: 111
- Joined: Fri Jun 13, 2008 9:06 pm
Re: minulla on pieni ongelma
okei rami, lue manuaalit, niin saat tehtyä sen. Kanttis myös lukea foorumit läpi, sieltäkin löytyy apua jo varmasti samanlaisiin ongelmiin ja niissäkin saatta olla peräti esimerkkikoodit, joita vain otat ja muutat hieman, vaikka sillä lailla et opikkaan paljoa.
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: minulla on pieni ongelma
Se voi esiintyä myös kun kuvaa, ääntä, karttaa, tiedostoa, muistipalaa tai fonttia ei voida käyttää.Olw1 wrote:Memory acces violation(eli MAV) tulee esim. kun yrität käsitellä objectia jota ei ole olemassakaan.
Re: minulla on pieni ongelma
pistin tuon tekstin ja pistin nimet oikein EHKÄ (kana ja ihminen) ja vieläkin sanoo samaa memory access violatin vaikka kokeilen mitä
mitä oikein teen
mitä oikein teen
Re: minulla on pieni ongelma
Jos koodisi ei ole kovin pitkä niin heitäppä tänne.
Korjailen sit kun olen pelannut eka yhden matsin Sensible Socceria
Edit:
Niin ja saa sen heittää jos on pitempikin,ei se haittaa
Korjailen sit kun olen pelannut eka yhden matsin Sensible Socceria
Edit:
Niin ja saa sen heittää jos on pitempikin,ei se haittaa
Huuda mun ip:tä!
Re: minulla on pieni ongelma
SCREEN 500,500
FrameLimit 40
ClsColor cbblack
ukko1 = LoadObject ("C:\Documents and Settings\HP_Administrator\Desktop\ramin peli\kana.bmp",72)
ukko2 = LoadObject ("C:\Documents and Settings\HP_Administrator\Desktop\ramin peli\ihminen.bmp",72)
RotateObject ukko1,0
RotateObject ukko2,180
PositionObject ukko1,-150,100
PositionObject ukko2,150,-100
SetupCollision ukko1,ukko2,2,2,2
SetupCollision ukko2,ukko1,2,2,2
Repeat
Color cbRed
Text 3,0,"Tuhoa vihollinen"
Color cbRed
Text 12,12,"Kana Vs ihminen"
If LeftKey() Then TurnObject ukko1,5
If RightKey() Then TurnObject ukko1,-5
If UpKey() Then MoveObject ukko1,2
If DownKey() Then MoveObject ukko1,-2
If KeyDown(cbKeyA) Then TurnObject ukko2,5
If KeyDown(cbKeyD) Then TurnObject ukko2,-5
If KeyDown(cbKeyW) Then MoveObject ukko2,2
If KeyDown(cbKeyS) Then MoveObject ukko2,-2
If ObjectX(ukko1)<-200 Then PositionObject ukko1,-200,ObjectY(ukko1)
If ObjectX(ukko1)>200 Then PositionObject ukko1,200,ObjectY(ukko1)
If ObjectY(ukko1)<-150 Then PositionObject ukko1,ObjectX(ukko1),-150
If ObjectY(ukko1)>150 Then PositionObject ukko1,ObjectX(ukko1),150
If ObjectX(ukko2)<-200 Then PositionObject ukko2,-200,ObjectY(ukko2)
If ObjectX(ukko2)>200 Then PositionObject ukko2,200,ObjectY(ukko2)
If ObjectY(ukko2)<-150 Then PositionObject ukko2,ObjectX(ukko2),-150
If ObjectY(ukko2)>150 Then PositionObject ukko2,ObjectX(ukko2),150
DrawScreen
Forever
tonne pitää lisätä se että se ihminen poistuu kun kana törmää siihen , miten lisään sen? (tämä on kaksinpeli)
FrameLimit 40
ClsColor cbblack
ukko1 = LoadObject ("C:\Documents and Settings\HP_Administrator\Desktop\ramin peli\kana.bmp",72)
ukko2 = LoadObject ("C:\Documents and Settings\HP_Administrator\Desktop\ramin peli\ihminen.bmp",72)
RotateObject ukko1,0
RotateObject ukko2,180
PositionObject ukko1,-150,100
PositionObject ukko2,150,-100
SetupCollision ukko1,ukko2,2,2,2
SetupCollision ukko2,ukko1,2,2,2
Repeat
Color cbRed
Text 3,0,"Tuhoa vihollinen"
Color cbRed
Text 12,12,"Kana Vs ihminen"
If LeftKey() Then TurnObject ukko1,5
If RightKey() Then TurnObject ukko1,-5
If UpKey() Then MoveObject ukko1,2
If DownKey() Then MoveObject ukko1,-2
If KeyDown(cbKeyA) Then TurnObject ukko2,5
If KeyDown(cbKeyD) Then TurnObject ukko2,-5
If KeyDown(cbKeyW) Then MoveObject ukko2,2
If KeyDown(cbKeyS) Then MoveObject ukko2,-2
If ObjectX(ukko1)<-200 Then PositionObject ukko1,-200,ObjectY(ukko1)
If ObjectX(ukko1)>200 Then PositionObject ukko1,200,ObjectY(ukko1)
If ObjectY(ukko1)<-150 Then PositionObject ukko1,ObjectX(ukko1),-150
If ObjectY(ukko1)>150 Then PositionObject ukko1,ObjectX(ukko1),150
If ObjectX(ukko2)<-200 Then PositionObject ukko2,-200,ObjectY(ukko2)
If ObjectX(ukko2)>200 Then PositionObject ukko2,200,ObjectY(ukko2)
If ObjectY(ukko2)<-150 Then PositionObject ukko2,ObjectX(ukko2),-150
If ObjectY(ukko2)>150 Then PositionObject ukko2,ObjectX(ukko2),150
DrawScreen
Forever
tonne pitää lisätä se että se ihminen poistuu kun kana törmää siihen , miten lisään sen? (tämä on kaksinpeli)
Re: minulla on pieni ongelma
oho se olikin pitkä teksti
Re: minulla on pieni ongelma
Lisäät vielä:
If countcollisions(ukko1) then
deleteobject ukko2
endif
If countcollisions(ukko2) then
deleteobject ukko1
endif
EDIT: En ole varma toimiiko, mutta kokeile.
If countcollisions(ukko1) then
deleteobject ukko2
endif
If countcollisions(ukko2) then
deleteobject ukko1
endif
EDIT: En ole varma toimiiko, mutta kokeile.
Re: minulla on pieni ongelma
Vinkki:Code-tagit helpottavat koodin lukemista.
Vinkki2:Tekstin piirtoväriä(Color-käsky) ei tarvitse kutsua joka kerta,kun jotain tekstiä näytölle lisää,jos ei sitä halua muuttaa. Siis,jos kaikki teksti tulee punaisella,käsket vain alussa Color cbred,ja sen jälkeen ei tarvitse tuota kirjoittaa.
Tässä olis tällänen viritys,kun kana(ukko1) kävelee ihmiseen(ukko2) pahki,ihminen(ukko2) katoaa,ja kana(ukko1) saa yhden pisteen. Painamalla R,kana ja ihminen palautuvat alkuperäisille paikoilleen. Vaihdat vain tiedostopolut omiksesi takaisin,ja se toimii. (kommentoin muutokseni...)
Edit
Jormalaz,sun koodisi aiheuttaa MAVin,syy:
Ensin tarkastetaan osuuko ukko1 mihinkään,jos osuu,niin poistetaan ukko2.
Sitten tarkastetaan osuuko ukko2 mihinkään,mutta ukko2 on jo poistettu.
Vinkki2:Tekstin piirtoväriä(Color-käsky) ei tarvitse kutsua joka kerta,kun jotain tekstiä näytölle lisää,jos ei sitä halua muuttaa. Siis,jos kaikki teksti tulee punaisella,käsket vain alussa Color cbred,ja sen jälkeen ei tarvitse tuota kirjoittaa.
Tässä olis tällänen viritys,kun kana(ukko1) kävelee ihmiseen(ukko2) pahki,ihminen(ukko2) katoaa,ja kana(ukko1) saa yhden pisteen. Painamalla R,kana ja ihminen palautuvat alkuperäisille paikoilleen. Vaihdat vain tiedostopolut omiksesi takaisin,ja se toimii. (kommentoin muutokseni...)
Code: Select all
SCREEN 500,500
FrameLimit 40
ClsColor cbblack
ukko1 = LoadObject ("media\guy.bmp",72)
ukko2 = LoadObject ("media\soldier.bmp",72)
RotateObject ukko1,0
RotateObject ukko2,180
PositionObject ukko1,-150,100
PositionObject ukko2,150,-100
SetupCollision ukko1,ukko2,2,2,2
SetupCollision ukko2,ukko1,2,2,2
Repeat
Color cbRed
Text 3,0,"Tuhoa vihollinen"
Text 12,12,"Kana Vs ihminen"
If LeftKey() Then TurnObject ukko1,5
If RightKey() Then TurnObject ukko1,-5
If UpKey() Then MoveObject ukko1,2
If DownKey() Then MoveObject ukko1,-2
If KeyDown(cbKeyA) Then TurnObject ukko2,5
If KeyDown(cbKeyD) Then TurnObject ukko2,-5
If KeyDown(cbKeyW) Then MoveObject ukko2,2
If KeyDown(cbKeyS) Then MoveObject ukko2,-2
If ObjectX(ukko1)<-200 Then PositionObject ukko1,-200,ObjectY(ukko1)
If ObjectX(ukko1)>200 Then PositionObject ukko1,200,ObjectY(ukko1)
If ObjectY(ukko1)<-150 Then PositionObject ukko1,ObjectX(ukko1),-150
If ObjectY(ukko1)>150 Then PositionObject ukko1,ObjectX(ukko1),150
If ObjectX(ukko2)<-200 Then PositionObject ukko2,-200,ObjectY(ukko2)
If ObjectX(ukko2)>200 Then PositionObject ukko2,200,ObjectY(ukko2)
If ObjectY(ukko2)<-150 Then PositionObject ukko2,ObjectX(ukko2),-150
If ObjectY(ukko2)>150 Then PositionObject ukko2,ObjectX(ukko2),150
//Jos ukko1 törmää johonkin,niin ukko2 piilotetaan ja muuttujaa kananpisteet kasvatetaan yhdellä
If CountCollisions(ukko1) Then
ShowObject ukko2,OFF
kananpisteet=kananpisteet+1
EndIf
//Jos painaa r-näppäintä,niin objektit palautuvat alkuperäisille paikoilleen alkuperäisiin kulmiin,ja ukko2 muutetaan jälleen näkyväksi
If KeyHit(cbkeyr) Then
PositionObject ukko1,-150,100
PositionObject ukko2,150,-100
RotateObject ukko1,0
RotateObject ukko2,180
ShowObject ukko2,ON
EndIf
Text 30,30,"Pisteitä kanalla:"+kananpisteet
DrawScreen
Forever
Edit
Jormalaz,sun koodisi aiheuttaa MAVin,syy:
Ensin tarkastetaan osuuko ukko1 mihinkään,jos osuu,niin poistetaan ukko2.
Sitten tarkastetaan osuuko ukko2 mihinkään,mutta ukko2 on jo poistettu.
Huuda mun ip:tä!
Re: minulla on pieni ongelma
Lisää Repeat-loopin sisään seuraavat rivit:
Lisäksi laita ohjaaminen ja liikkumisen rajoitus (ja kaikki missä ukko2-objektia eli kanaa käytetään) toteutumaan vain jos ei olla törmätty, eli näin:
Näin voidaan välttää MAV.
Voit myös yhdistää kaksi ylempää koodia ja laittaa ohjaamisen ym. tuon ehtolausekkeen sisään, ennen törmäystarkistusta.
EDIT: Vähän myöhässä. Toivottavasti viesti kuitenkin selventää ideaa.
Code: Select all
If tormatty = 0 Then 'seuraavalle riville mennään vain jos ei olla aikaisemmin törmätty
If CountCollisions(ukko1) Then 'jos ukko on nyt törmäämässä kanaan
DeleteObject ukko2 'poistetaan kana
tormatty = 1 'merkitään että törmäys on tapahtunut (jää muistiin)
EndIf
EndIf
Code: Select all
If tormatty = 0 Then
'kanan ohjaaminen
'kanan sijainnin rajoittaminen
EndIf
Voit myös yhdistää kaksi ylempää koodia ja laittaa ohjaamisen ym. tuon ehtolausekkeen sisään, ennen törmäystarkistusta.
EDIT: Vähän myöhässä. Toivottavasti viesti kuitenkin selventää ideaa.
Peli piirtokomennoilla - voittaja, Virtuaalilemmikkipeli - voittaja,
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
Sukellusvenepeli - voittaja, Paras tileset - voittaja
Vaihtuva päähenkilö - voittaja, Autopeli - voittaja sekä
Hiirellä ohjattava peli - voittaja B)
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: minulla on pieni ongelma
Saanko nauraa? Teh allmighty evolol.Jormalaz wrote:Lisäät vielä:
If countcollisions(ukko1) then
deleteobject ukko2
endif
If countcollisions(ukko2) then
deleteobject ukko1
endif
EDIT: En ole varma toimiiko, mutta kokeile.
Code: Select all
SCREEN 500,500
FrameLimit 40
ClsColor cbblack
ukko1 = LoadObject ("C:\Documents and Settings\HP_Administrator\Desktop\ramin peli\kana.bmp",72)
ukko2 = LoadObject ("C:\Documents and Settings\HP_Administrator\Desktop\ramin peli\ihminen.bmp",72)
RotateObject ukko1,0
RotateObject ukko2,180
PositionObject ukko1,-150,100
PositionObject ukko2,150,-100
Repeat
Color cbRed
Text 3,0,"Tuhoa vihollinen"
Color cbRed
Text 12,12,"Kana Vs ihminen"
If LeftKey() Then TurnObject ukko1,5
If RightKey() Then TurnObject ukko1,-5
If UpKey() Then MoveObject ukko1,2
If DownKey() Then MoveObject ukko1,-2
If KeyDown(cbKeyA) Then TurnObject ukko2,5
If KeyDown(cbKeyD) Then TurnObject ukko2,-5
If KeyDown(cbKeyW) Then MoveObject ukko2,2
If KeyDown(cbKeyS) Then MoveObject ukko2,-2
If ObjectX(ukko1)<-200 Then PositionObject ukko1,-200,ObjectY(ukko1)
If ObjectX(ukko1)>200 Then PositionObject ukko1,200,ObjectY(ukko1)
If ObjectY(ukko1)<-150 Then PositionObject ukko1,ObjectX(ukko1),-150
If ObjectY(ukko1)>150 Then PositionObject ukko1,ObjectX(ukko1),150
If ObjectX(ukko2)<-200 Then PositionObject ukko2,-200,ObjectY(ukko2)
If ObjectX(ukko2)>200 Then PositionObject ukko2,200,ObjectY(ukko2)
If ObjectY(ukko2)<-150 Then PositionObject ukko2,ObjectX(ukko2),-150
If ObjectY(ukko2)>150 Then PositionObject ukko2,ObjectX(ukko2),150
If ObjectsOverlap(ukko1, ukko2) Then
ShowObject ukko1, OFF
EndIf
DrawScreen
Forever
Haiskahtaa muuten valmiin esimerkin käyttämiseltä : D Toki valmiin modaus on hyvä tapa oppia, mutta älä toki väitä itse tekemäksesi.
Ja sitten, täysin ilman kenenkään lupaa, kerron pari asiaa:
Tämä vaikuttaa ensimmäiseltä projektiltasi. Älä ikinä julkaise ensimmäistä projektiasi minkään sortin tuotoksena. Itse tein aikanaan sen virheen, ja kylläpä sitä katuu. Se oli, sikäli kuin muistan, hirveää purkkaa, esimerkeistä kopiointia ja huono peli. Ei kukaan ole seppä CB:n ladattuaan. (itse asiassa tämä kielto koskee yleensä myös toista ja kolmatta, usein myös paria seuraavaa, mutta kuitenkin)
Viimeistely on kaiken A ja O. Kirjoitin joskus hieman pidemmältikin aiheesta esimerkin kera, mutta pari pientä huomiota riittänee tällä kertaa: Älä toki lataa kuvia koko polulla, vaan käytä niin sanottuja paikallista (tai mikä hieno termi onkaan) polkua. Eli tallennat koodin, myöhemmin pelin .exen, samaan kansioon median kanssa. Tai vielä parempaa, laita media alikansioon. Hyväksi havaittu rakenne: Kaksi kansiota. Tyyliin "peli" ja "kuvat". Kansio "kuvat" sijaitsee kansion "peli" sisällä. Kansioon "peli" tallennetaan lähdekoodi (se .cb -tiedosto) ja peliä jaettaessa .exe. Kansioon "kuvat" tallennetaan - yllätys yllätys - kuvat ja projektisi mahdollisesti tarvitsemat äänet. Siten voit pelin koodissa kirjoittaa vain
Code: Select all
ukko1 = LoadObject("kuvat\kana.bmp", 72)
Lisäksi pelin nimen voi laittaa ikkunan yläpalkkiin, kuten CoolBasicin ikkunassa lukee "CoolBasic". Se näkyy myös tuolla alapalkissa, taskbariko se nyt oli. Se on hyvin helppoa. Ohjelman alkuun, vaikka SCREEN:in jälkeiselle riville
Code: Select all
SetWindow "Kana Vs ihminen"
Sitten, sisennykset. Kun kirjoitat koodiasi, kokeile nakata jokainen looppi ja monirivinen If-lause sarkaimen verran sisemmäs. Lisäksi muutama ylimääräinen rivi ja väli selkeyttää koodiasi kummasti. Vältä myös kaksoispisteitä ja kommentoi, jos jaksat. Tässäpä parissa minuutissa väsätty demonstraatio.
Huomaa ero:
Code: Select all
y#=0.0:yvel#=0.0:yell=0:redtimer=0
Repeat
If UpKey() Then yvel#=yvel#+0.04:yell=1 Else yell=0
yvel#=yvel#-0.02
y#=y#+yvel#
Color 100,100,100
If y#<0.0 Then
y#=0.0
If yvel#<-0.6 Then redtimer=Timer()+50
yvel#=-yvel#*0.6
EndIf
If Timer()<redtimer Then Color 255,0,0
Box 190,290-y#,20,10
If yell Then Color 255, 255,0:Box 195,300-y,10,4
DrawScreen
Forever
Code: Select all
y# = 0.0'coordinate of the ship
yvel# = 0.0'velocity
yell = 0'is the thruster being used
redtimer = 0'when last damaging contact to ground
Repeat
If UpKey() Then//the thruster is being used, add velocity
yvel# = yvel# + 0.04
yell = 1
Else
yell = 0
EndIf
//add gravity to velocity and velocity to coordinates
yvel# = yvel# - 0.02
y#=y#+yvel#
Color 100,100,100'default ship color
//if the ship is underground
If y#<=0.0 Then
y#=0.0'bring it back up
If yvel#<-0.6 Then redtimer=Timer()+50'if it hit hard enough, the ship will be red for 50 milliseconds
yvel#=-yvel#*0.6'energy loss: some energy transforms to heat and sound
EndIf
If Timer()<redtimer Then Color 255,0,0'damage color
Box 190,290-y#,20,10'draw the ship..
If yell Then Color 255, 255,0:Box 195,300-y,10,4'..and a flame in case the thruster has been used
DrawScreen'draw the screen
Forever
EDIT: No johan on kun pitkään kirjoitin, parikin lisäystä kerkesi tulla välissä.
Re: minulla on pieni ongelma
kiitos se on nyt valmis ja hyvä tuli vielä vois muokata tietokoneälyn tuolle kanalle niin voisi pelata yksinkin jos jaksaisi .
piti korjata vain showobject ukko2,off ukko1 oli se hirviö
Tämä oli minun ensimmäinen Peli
piti korjata vain showobject ukko2,off ukko1 oli se hirviö
Tämä oli minun ensimmäinen Peli