Re: Tyhmät kysymykset (I/2011)
Posted: Mon Dec 19, 2011 6:39 pm
If GetMap2(3, ObjectX(pelihahmo), ObjectY(pelihahmo)) = 1 Then pitäisi toimia
Game Making Should Be Easy...
https://www.coolbasic.com/phpBB3/
oletko tarkastanut kaikki muuttajat, ja mahd. virheet koodissa ?onkelma wrote:se nyt ei jostain syystä näyttäisi toimivan?
Code: Select all
Const PAINOVOIMA = -0.3 'painoviman voimakkuus
'pienempi->suurempi pv.
'positiiviset arvot->
'painovoima ylöspäin?!
yPlus#=0 'Tämä hallitsee hyppyä
SCREEN 800,600,0,cbwindowed
FrameLimit 40
'-------------------------------------------------
kenttä=LoadMap("Map1.til","malli tileset.png")
PositionObject kenttä,0,50
MaskObject kenttä,cbmagenta
PlayObject kenttä,0,0,0.5
oikea=LoadAnimObject("pelihahmo.png",40,64,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF
ObjectRange oikea,40,64
vasen=LoadAnimObject("pelihahmo2.png",40,64,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF
ObjectRange vasen,40,64
pelihahmo=CloneObject(oikea)
SetupCollision pelihahmo,kenttä,1,4,2
ObjectRange pelihahmo,40,64 '
'-------------------------------------------------
'Pääsilmukka
Repeat
ClsColor cbsilver
vauhti=0 'oletuksena ei liikettä
If RightKey() Then
PaintObject pelihahmo,oikea .
If maassa Then PlayObject pelihahmo,2,13,0.3
vauhti=4
ElseIf LeftKey() Then
PaintObject pelihahmo,vasen
If maassa Then PlayObject pelihahmo,2,13,0.25
vauhti=-4
Else
PlayObject pelihahmo,0
EndIf
TranslateObject pelihahmo,vauhti,yPlus#
yPlus=yPlus+PAINOVOIMA
UpdateGame
CloneCameraPosition pelihahmo
maassa=0
törmäykset=CountCollisions(pelihahmo)
For i=1 To törmäykset
If GetCollision(pelihahmo,i)=kenttä
If CollisionAngle(pelihahmo,i)=90 Then
yPlus#=-1
maassa=1
EndIf
If CollisionAngle(pelihahmo,i)=270 Then
yPlus#=-1
EndIf
EndIf
Next i
If törmäykset=0 Then PlayObject pelihahmo,12,0
If KeyDown(cbKeyZ) And maassa Then
yPlus#=7.7
EndIf
If GetMap2(3, ObjectX(pelihahmo), ObjectY(pelihahmo)) = 1 Then
yPlus#=0.5
EndIf
DrawScreen
Until EscapeKey()
Jaha, GetMap lukee pikseleinä eikä GetMap2. Siinä se ongelma, poista kakkonen.
Senhän kuuluu ollakin.Art wrote:painovoima on vakio ja ei voi muuttua
Kiitos tästä fysiikan oppitunnista.Art wrote:painovoima on vakio ja ei voi muuttua
Code: Select all
Const PAINOVOIMA = -0.3 'painoviman voimakkuus
'pienempi->suurempi pv.
'positiiviset arvot->
'painovoima ylöspäin?!
yPlus#=0 'Tämä hallitsee hyppyä
SCREEN 800,600,0,cbwindowed
FrameLimit 40
'-------------------------------------------------
kenttä=LoadMap("Map1.til","malli tileset.png")
PositionObject kenttä,0,50
MaskObject kenttä,cbmagenta
PlayObject kenttä,0,0,0.5
oikea=LoadAnimObject("pelihahmo.png",40,64,0,13)
MaskObject oikea,cbMagenta
ShowObject oikea,OFF
ObjectRange oikea,40,64
vasen=LoadAnimObject("pelihahmo2.png",40,64,0,13)
MaskObject vasen,cbMagenta
ShowObject vasen,OFF
ObjectRange vasen,40,64
pelihahmo=CloneObject(oikea)
SetupCollision pelihahmo,kenttä,1,4,2
ObjectRange pelihahmo,40,64
'-------------------------------------------------
'Pääsilmukka
Repeat
ClsColor cbsilver
vauhti=0 'oletuksena ei liikettä
If RightKey() Then
PaintObject pelihahmo,oikea
If maassa Then PlayObject pelihahmo,2,13,0.3
vauhti=4
ElseIf LeftKey() Then
PaintObject pelihahmo,vasen
If maassa Then PlayObject pelihahmo,2,13,0.25
vauhti=-4
Else
PlayObject pelihahmo,0
EndIf
TranslateObject pelihahmo,vauhti,yPlus#
yPlus=yPlus+PAINOVOIMA
UpdateGame
CloneCameraPosition pelihahmo
maassa=0
törmäykset=CountCollisions(pelihahmo)
For i=1 To törmäykset
If GetCollision(pelihahmo,i)=kenttä
If CollisionAngle(pelihahmo,i)=90 Then
yPlus#=-1
maassa=1
EndIf
If CollisionAngle(pelihahmo,i)=270 Then
yPlus#=-1
EndIf
EndIf
Next i
If törmäykset=0 Then PlayObject pelihahmo,12,0
If KeyDown(cbKeyZ) And maassa Then
yPlus#=7.7
EndIf
No shit sherlock. Se koodin alkuosahan on suoraan kopioitu CoolBasicin painovoimaesimerkistä pienillä arvojen muutoksilla, totta kai se toimii. Eikä alkuperäinen kysyjäkään tainnut sanoa mitään sellaisesta, että ohjelma ei käynnisty.Art wrote:Code: Select all
Const PAINOVOIMA = -0.3 'painoviman voimakkuus 'pienempi->suurempi pv. 'positiiviset arvot-> 'painovoima ylöspäin?! yPlus#=0 'Tämä hallitsee hyppyä SCREEN 800,600,0,cbwindowed FrameLimit 40 '------------------------------------------------- kenttä=LoadMap("Map1.til","malli tileset.png") PositionObject kenttä,0,50 MaskObject kenttä,cbmagenta PlayObject kenttä,0,0,0.5 oikea=LoadAnimObject("pelihahmo.png",40,64,0,13) MaskObject oikea,cbMagenta ShowObject oikea,OFF ObjectRange oikea,40,64 vasen=LoadAnimObject("pelihahmo2.png",40,64,0,13) MaskObject vasen,cbMagenta ShowObject vasen,OFF ObjectRange vasen,40,64 pelihahmo=CloneObject(oikea) SetupCollision pelihahmo,kenttä,1,4,2 ObjectRange pelihahmo,40,64 '------------------------------------------------- 'Pääsilmukka Repeat ClsColor cbsilver vauhti=0 'oletuksena ei liikettä If RightKey() Then PaintObject pelihahmo,oikea If maassa Then PlayObject pelihahmo,2,13,0.3 vauhti=4 ElseIf LeftKey() Then PaintObject pelihahmo,vasen If maassa Then PlayObject pelihahmo,2,13,0.25 vauhti=-4 Else PlayObject pelihahmo,0 EndIf TranslateObject pelihahmo,vauhti,yPlus# yPlus=yPlus+PAINOVOIMA UpdateGame CloneCameraPosition pelihahmo maassa=0 törmäykset=CountCollisions(pelihahmo) For i=1 To törmäykset If GetCollision(pelihahmo,i)=kenttä If CollisionAngle(pelihahmo,i)=90 Then yPlus#=-1 maassa=1 EndIf If CollisionAngle(pelihahmo,i)=270 Then yPlus#=-1 EndIf EndIf Next i If törmäykset=0 Then PlayObject pelihahmo,12,0 If KeyDown(cbKeyZ) And maassa Then yPlus#=7.7 EndIf
Poistin 2 pistettä väärästä kohtaa ja itselläni ainakin toimii, niin kauvan kunnes ei voi ladata karttaa jota ei mulla luonnollisesti ole..
Sijaitsevatko nuo Map1 ja malli tileset siinä samassa kansiossa kuin tämä koodi? Jos ei, niin ongelma on siinä. Ohjelma siis etsii aina sieltä kansiosta ellet määrittele eteen "Kansio\"(seuraava kansio), "...\"(edellinen kansio) tai "C:\" Tai joku muu levyn kirjain. Esim. jos tiedosto sijaitsee: "C:\matti\desktop\map1.til" niin jos koodisikin on sijainnissa "C:\matti\desktop\koodi.cb" niin LoadMap("map1.til,"kuva.jpg") toimii.Art wrote:Code: Select all
Const PAINOVOIMA = -0.3 'painoviman voimakkuus 'pienempi->suurempi pv. 'positiiviset arvot-> 'painovoima ylöspäin?! yPlus#=0 'Tämä hallitsee hyppyä SCREEN 800,600,0,cbwindowed FrameLimit 40 '------------------------------------------------- kenttä=LoadMap("Map1.til","malli tileset.png") PositionObject kenttä,0,50 MaskObject kenttä,cbmagenta PlayObject kenttä,0,0,0.5 oikea=LoadAnimObject("pelihahmo.png",40,64,0,13) MaskObject oikea,cbMagenta ShowObject oikea,OFF ObjectRange oikea,40,64 vasen=LoadAnimObject("pelihahmo2.png",40,64,0,13) MaskObject vasen,cbMagenta ShowObject vasen,OFF ObjectRange vasen,40,64 pelihahmo=CloneObject(oikea) SetupCollision pelihahmo,kenttä,1,4,2 ObjectRange pelihahmo,40,64 '------------------------------------------------- 'Pääsilmukka Repeat ClsColor cbsilver vauhti=0 'oletuksena ei liikettä If RightKey() Then PaintObject pelihahmo,oikea If maassa Then PlayObject pelihahmo,2,13,0.3 vauhti=4 ElseIf LeftKey() Then PaintObject pelihahmo,vasen If maassa Then PlayObject pelihahmo,2,13,0.25 vauhti=-4 Else PlayObject pelihahmo,0 EndIf TranslateObject pelihahmo,vauhti,yPlus# yPlus=yPlus+PAINOVOIMA UpdateGame CloneCameraPosition pelihahmo maassa=0 törmäykset=CountCollisions(pelihahmo) For i=1 To törmäykset If GetCollision(pelihahmo,i)=kenttä If CollisionAngle(pelihahmo,i)=90 Then yPlus#=-1 maassa=1 EndIf If CollisionAngle(pelihahmo,i)=270 Then yPlus#=-1 EndIf EndIf Next i If törmäykset=0 Then PlayObject pelihahmo,12,0 If KeyDown(cbKeyZ) And maassa Then yPlus#=7.7 EndIf
Poistin 2 pistettä väärästä kohtaa ja itselläni ainakin toimii, niin kauvan kunnes ei voi ladata karttaa jota ei mulla luonnollisesti ole..
Ongelmahan ei ole siinä, että koodi ei toimi. Ongelma oli siinä, että alkuperäinen kysyjä (vieras) ei saanut tasohyppelypelissä hahmoa menemään tikkaiden kohdalla ylöspäin. Sen jälkeen, kun Esa oli jo ratkaissut ongelman, Art ensin ilmoitti painovoiman olevan vakio, sitten vähän myöhemmin ilmoitti, että CoolBasicin painovoimaoppitunti toimii ja että hänellä ei ole alkuperäisen kysyjän karttaa, ja sitten sinä lainasit Artia.naputtelija wrote:Sijaitsevatko nuo Map1 ja malli tileset siinä samassa kansiossa kuin tämä koodi? Jos ei, niin ongelma on siinä. Ohjelma siis etsii aina sieltä kansiosta ellet määrittele eteen "Kansio\"(seuraava kansio), "...\"(edellinen kansio) tai "C:\" Tai joku muu levyn kirjain. Esim. jos tiedosto sijaitsee: "C:\matti\desktop\map1.til" niin jos koodisikin on sijainnissa "C:\matti\desktop\koodi.cb" niin LoadMap("map1.til,"kuva.jpg") toimii.Art wrote:Code: Select all
Const PAINOVOIMA = -0.3 'painoviman voimakkuus 'pienempi->suurempi pv. 'positiiviset arvot-> 'painovoima ylöspäin?! yPlus#=0 'Tämä hallitsee hyppyä SCREEN 800,600,0,cbwindowed FrameLimit 40 '------------------------------------------------- kenttä=LoadMap("Map1.til","malli tileset.png") PositionObject kenttä,0,50 MaskObject kenttä,cbmagenta PlayObject kenttä,0,0,0.5 oikea=LoadAnimObject("pelihahmo.png",40,64,0,13) MaskObject oikea,cbMagenta ShowObject oikea,OFF ObjectRange oikea,40,64 vasen=LoadAnimObject("pelihahmo2.png",40,64,0,13) MaskObject vasen,cbMagenta ShowObject vasen,OFF ObjectRange vasen,40,64 pelihahmo=CloneObject(oikea) SetupCollision pelihahmo,kenttä,1,4,2 ObjectRange pelihahmo,40,64 '------------------------------------------------- 'Pääsilmukka Repeat ClsColor cbsilver vauhti=0 'oletuksena ei liikettä If RightKey() Then PaintObject pelihahmo,oikea If maassa Then PlayObject pelihahmo,2,13,0.3 vauhti=4 ElseIf LeftKey() Then PaintObject pelihahmo,vasen If maassa Then PlayObject pelihahmo,2,13,0.25 vauhti=-4 Else PlayObject pelihahmo,0 EndIf TranslateObject pelihahmo,vauhti,yPlus# yPlus=yPlus+PAINOVOIMA UpdateGame CloneCameraPosition pelihahmo maassa=0 törmäykset=CountCollisions(pelihahmo) For i=1 To törmäykset If GetCollision(pelihahmo,i)=kenttä If CollisionAngle(pelihahmo,i)=90 Then yPlus#=-1 maassa=1 EndIf If CollisionAngle(pelihahmo,i)=270 Then yPlus#=-1 EndIf EndIf Next i If törmäykset=0 Then PlayObject pelihahmo,12,0 If KeyDown(cbKeyZ) And maassa Then yPlus#=7.7 EndIf
Poistin 2 pistettä väärästä kohtaa ja itselläni ainakin toimii, niin kauvan kunnes ei voi ladata karttaa jota ei mulla luonnollisesti ole..
Mainitsemassasi koodissa läpikäydään kahden sisäkkäisen For-silmukan avulla koko kartan datakerros läpi.aloittelijamies wrote:Yritän saada objecteja (kuten kerättäväviä tavaroita joista saa pisteitä tai hp:ta) peliini. Objectit on sijoitettu tilekarttaan datakerroksen avulla
ja kokeilin tästä topicista hakea koodia hoitamaan homman.
Lopputuloksena peli toimii normaalisti, mutta ilman haluttuja karttaan asetettuja datatilejä ja niille paikoille sijoitettuja objekteja
Saisiko tuohon yllämainittuun koodiin vielä jotain selvennystä yms? Data-arvo(4 kartassa ja myös koodissa) ja cloneobject on jo selvää. Esine objecti on ajettu peliin loadobject kommennolla jo valmiiksi joten cloneobjectista tuskin johtuu.
Code: Select all
tile_leveys*(-0.5*MapWidth() + x - 0.5) + ObjectX(kartta)
Code: Select all
tile_leveys *
(
-0.5 * MapWidth()
+ x
- 0.5
)
+ ObjectX(kartta)
Code: Select all
tile_leveys*(-0.5*MapHeight() - y + 0.5) + ObjectY(kartta)
Code: Select all
Function SijoitaObjKartalle(objekti, mapX, mapY, tilenLeveys = 32, tilenKorkeus = 32)
PositionObject objekti, (-MapWidth()*tilenLeveys)/2+mapX*tilenLeveys-ObjectSizeX(objekti)/2, (MapHeight()*tilenLeveys)/2-mapY*tilenLeveys-ObjectSizeY(objekti)/2
EndfFunction
Code: Select all
FrameLimit 40
kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta,0,0,1
ukko = LoadObject ("Media\guy.bmp",72)
SetupCollision ukko, kartta, 1, 4, 2
PositionObjectMap(ukko, 20, 45) //Tässä kohtaa käytetään tekemääni funktiota.
Repeat
If LeftKey() Then TurnObject ukko,5
If RightKey() Then TurnObject ukko,-5
If UpKey() Then MoveObject ukko,2
If DownKey() Then MoveObject ukko,-2
UpdateGame
CloneCameraPosition ukko
DrawScreen
Forever
Function PositionObjectMap(objekti, mapX, mapY, tilenLeveys = 32, tilenKorkeus = 32)
PositionObject objekti, (-MapWidth()*tilenLeveys)/2+mapX*tilenLeveys-ObjectSizeX(objekti)/2, (MapHeight()*tilenLeveys)/2-mapY*tilenLeveys+ObjectSizeY(objekti)/2
EndFunction
Koita heittää vaikka MakeErrorilla virhettä siinä kohtaa kun kloonaat objektin. Näet sillä sitten että toimiiko objektien laittaminen kartalle alunperinkään.aloittelijamies wrote:Koodi toimii oikein(ei heitä mitään erroria kun peli käynnistyy,data-arvot syötetty karttaan ja objektki ladattu mutta silti data-arvoisten tilejen kohdalla ei näy yhtään mitään.
Esine joka ladatiin loadobject komennolla toimii ja näkyy, mutta nämä "kloonanut" ei vaikkakin cloneobject komento on oikein.
Code: Select all
If GetMap(3,ObjectX(bullet),ObjectY(bullet)) = 4 Then
EditMap map,1,ObjectX(bullet),ObjectY(bullet),15
EditMap map,3,ObjectX(bullet),ObjectY(bullet),5
DeleteObject bullet
EndIf