Code: Select all
Function TileToWorldX(tx,tilew,map)
wx=tx*tilew-ObjectSizeX(map)/2
Return wx
EndFunction
Function TileToWorldY(ty,tileh,map)
wy=ty*tileh-ObjectSizeY(map)/2
Return -wy
EndFunction
Code: Select all
Function TileToWorldX(tx,tilew,map)
wx=tx*tilew-ObjectSizeX(map)/2
Return wx
EndFunction
Function TileToWorldY(ty,tileh,map)
wy=ty*tileh-ObjectSizeY(map)/2
Return -wy
EndFunction
Ja toimivat vain mikäli karttaa ei ole menty liikuttamaan (0,0) koordinaateista.Pate5 wrote:Peräisin vanhasta CBKK:sta.Code: Select all
Function TileToWorldX(tx,tilew,map) wx=tx*tilew-ObjectSizeX(map)/2 Return wx EndFunction Function TileToWorldY(ty,tileh,map) wy=ty*tileh-ObjectSizeY(map)/2 Return -wy EndFunction
Code: Select all
FrameLimit 40
map= LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject map,0,0,0.5
ObjectPickable map,ON
guy= LoadObject("Media\soldier.bmp",72)
Repeat
MoveObject guy,nopeus
TurnObject guy,kääntö
If LeftKey() Then TurnObject guy,5
If RightKey() Then TurnObject guy, -5
If UpKey() Then MoveObject guy,2
If DownKey() Then MoveObject guy, -2
ObjectPick guy
CloneCameraPosition guy
DrawGame
DrawToWorld ON
Circle PickedX()-5,PickedY()+5,10
If Distance(ObjectX(guy),ObjectY(guy),PickedX(),PickedY())<100 Then
Text 0,0,"seinä on lähellä"
Text 0,20,"objektin kulma "+ObjectAngle(guy)
If ObjectAngle(guy)<90 Then
Text 0,40,"seinä on oikealla-ylhäällä"
aika=8
kääntö=4
nopeus=0
ElseIf ObjectAngle(guy)>90 And ObjectAngle(guy)<180 Then
Text 0,40,"seinä on vasemmalla-ylhäällä"
aika=8
kääntö=-4
nopeus=0
ElseIf ObjectAngle(guy)>180 And ObjectAngle(guy)<270 Then
Text 0,40,"seinä on vasemmalla-alhaalla"
aika=8
kääntö=-4
nopeus=01
ElseIf ObjectAngle(guy)>270 Then
Text 0,40,"seinä on oikealla-alhaalla"
aika=8
kääntö=4
nopeus=0
EndIf
EndIf
If aika=>1 Then aika=aika-1
If Distance(ObjectX(guy),ObjectY(guy),PickedX(),PickedY())>100 And aika=<0 Then
kääntö=0
nopeus=2
EndIf
Text 0,60,"kääntö kulma "+kääntö
Text 0,80,"nopeutesi "+nopeus
Text 0,100,"ajastus "+aika
DrawScreen
Until EscapeKey()
Sinun pitää ottaa huomioon myös guy objektin kulma, koska liikutat sitä TurnObject:lla ja MoveObject:lla. Teen paremman vastauksen mikäli jaksat sisentää koodisi.1234213112 wrote:KOitin tehä jotai tekoälyy mut ei siit mitää tullu =D täs nyt ois tää koodi
seuraat vähä aikaa sitä nii jää aina jumittaa jos kulma on esim tasan 90,tasan 180 jne.Code: Select all
FrameLimit 40 map= LoadMap("Media\cdm2.til","Media\tileset.bmp") PlayObject map,0,0,0.5 ObjectPickable map,ON guy= LoadObject("Media\soldier.bmp",72) Repeat MoveObject guy,nopeus TurnObject guy,kääntö If LeftKey() Then TurnObject guy,5 If RightKey() Then TurnObject guy, -5 If UpKey() Then MoveObject guy,2 If DownKey() Then MoveObject guy, -2 ObjectPick guy CloneCameraPosition guy DrawGame DrawToWorld ON Circle PickedX()-5,PickedY()+5,10 If Distance(ObjectX(guy),ObjectY(guy),PickedX(),PickedY())<100 Then Text 0,0,"seinä on lähellä" Text 0,20,"objektin kulma "+ObjectAngle(guy) If ObjectAngle(guy)<90 Then Text 0,40,"seinä on oikealla-ylhäällä" aika=8 kääntö=4 nopeus=0 ElseIf ObjectAngle(guy)>90 And ObjectAngle(guy)<180 Then Text 0,40,"seinä on vasemmalla-ylhäällä" aika=8 kääntö=-4 nopeus=0 ElseIf ObjectAngle(guy)>180 And ObjectAngle(guy)<270 Then Text 0,40,"seinä on vasemmalla-alhaalla" aika=8 kääntö=-4 nopeus=01 ElseIf ObjectAngle(guy)>270 Then Text 0,40,"seinä on oikealla-alhaalla" aika=8 kääntö=4 nopeus=0 EndIf EndIf If aika=>1 Then aika=aika-1 If Distance(ObjectX(guy),ObjectY(guy),PickedX(),PickedY())>100 And aika=<0 Then kääntö=0 nopeus=2 EndIf Text 0,60,"kääntö kulma "+kääntö Text 0,80,"nopeutesi "+nopeus Text 0,100,"ajastus "+aika DrawScreen Until EscapeKey()
CloseFile puuttuu? Tai sitten kannattaisi käyttää readlineä.Pyromanius wrote:Miksi tämä MAVittaa?
Kyllä, ohjelma saa oikean polun. Ja kyllä, tiedostossa on sisältöä. Ja kyllä, se myös saa ladattua sen.Code: Select all
file$ = Trim(Replace(CommandLine(), Chr(34), "")) filu=OpenToRead(file) mj$ = ReadString(filu)
Ongelma on readstringissä, ilman sitä toimii.
Missä voisi olla vika?
avaat tiedoston file-muuttujaan mutta yrität lukea filu-muuttujasta.naputtelija wrote:CloseFile puuttuu? Tai sitten kannattaisi käyttää readlineä.Pyromanius wrote:Miksi tämä MAVittaa?
Kyllä, ohjelma saa oikean polun. Ja kyllä, tiedostossa on sisältöä. Ja kyllä, se myös saa ladattua sen.Code: Select all
file$ = Trim(Replace(CommandLine(), Chr(34), "")) filu=OpenToRead(file) mj$ = ReadString(filu)
Ongelma on readstringissä, ilman sitä toimii.
Missä voisi olla vika?
Mit vit? Kysymys esitettiin 41 sivulla ja siihen on jo vastattu. Ja hän avaa filu muuttujaan. file:ssä on vain osoite missä tiedosto on.Kille wrote:avaat tiedoston file-muuttujaan mutta yrität lukea filu-muuttujasta.naputtelija wrote:CloseFile puuttuu? Tai sitten kannattaisi käyttää readlineä.Pyromanius wrote:Miksi tämä MAVittaa?
Kyllä, ohjelma saa oikean polun. Ja kyllä, tiedostossa on sisältöä. Ja kyllä, se myös saa ladattua sen.Code: Select all
file$ = Trim(Replace(CommandLine(), Chr(34), "")) filu=OpenToRead(file) mj$ = ReadString(filu)
Ongelma on readstringissä, ilman sitä toimii.
Missä voisi olla vika?
Kun sisensin koodin puolestasi löysin vian. Iffi hässäkkän ehdot tekevät juuri sitä, mitä olet kirjoittanut sinne: kääntele ja liikuta objektia kaikilla muilla kulmilla, paitsi tasakulmilla 0, 90, 180 ja 270. Käytä <= ja >= operaattoreita, tai käsittele tasakulmat erikseen.1232412 wrote:oon kyl ottanu objektin kulma huomio,koska sen mukaa sitä objektii käännetäänki 4 tai -4,vai mitä tarkotit sillä?
Laittaisitko funktiosi näkyville? Kristallipalloni kuva on kovin sumea.24243 wrote:Mite saan ,nii ettei peli aina jumitu ku kutsun funktioo?Siin funktios vihollis käännetään oikeelle tai vasemalle kunnes seinii ei enää näy,nii kaikki muu aina jumittuu käännön ajaksi.
Code: Select all
Function käännetään_vasemmalle(_obj)
Repeat
ObjectPick _obj
TurnObject _obj,3
DrawScreen
Until(Distance(ObjectX(_obj),ObjectY(_obj),PickedX(),PickedY())>80)
End Function
Objektia pyöritetään ikuisesti, sillä et liikuta sitä mihinkään, jolloin tuo Distance-funktion palauttama arvo ei muutu mihinkään. Jos etäisyys poimittuihin koordinaatteihin on aluksi pienempi kuin 80, jää ohjelma ikuiseen silmukkaan tuon Until-ehtolauseen takia. Lisää tuonne Repeat-silmukkaan sisälle ennen drawscreeniä komento MoveObject _obj, joku_määrä_liikettä, niin jossain vaiheessa silmukasta SAATETAAN päästä pois. Kuitenkin tuossa voi ehkä käydä niin, että objekti ei koskaan pääse tarpeeksi kauas poimituista koordinaateista vaikka sitä kuinka liikuteltaisiin ja pyöriteltäisiin.242142 wrote:Code: Select all
Function käännetään_vasemmalle(_obj) Repeat ObjectPick _obj TurnObject _obj,3 DrawScreen Until(Distance(ObjectX(_obj),ObjectY(_obj),PickedX(),PickedY())>80) End Function
Code: Select all
FrameLimit 60 'rajoita nopeutta
SCREEN 800,600
kartta = LoadMap("Media\cdm2.til","Media\tileset.bmp")
PlayObject kartta,0,0,1
ObjectPickable kartta,ON
ukko = LoadObject ("Media\guy.bmp",72)
pelaaja = LoadObject ("Media\guy.bmp",72)
obj1=MakeObject()
obj2=MakeObject()
SetupCollision ukko, kartta, 1, 4, 2
PositionObject ukko,-180,-200
Repeat
If LeftKey() Then TurnObject pelaaja,5
If RightKey() Then TurnObject pelaaja, -5
If UpKey() Then MoveObject pelaaja, 2
If DownKey() Then MoveObject pelaaja, -2
objx=ObjectX(ukko)
objy=ObjectY(ukko)
ang=ObjectAngle(ukko)
CloneObjectPosition obj1,ukko
RotateObject obj1,ang+20
CloneObjectPosition obj2,ukko
RotateObject obj2,ang-20
CloneCameraPosition pelaaja
DrawGame
DrawToWorld ON
If tehdään=0 Then
ObjectPick ukko
ukko_pickx=PickedX()
ukko_picky=PickedY()
Circle PickedX() -5,PickedY()+5,10,ON
ObjectPick obj1
obj1_pickx=PickedX()
obj1_picky=PickedY()
Circle PickedX() -5,PickedY()+5,10,ON
ObjectPick obj2
obj2_pickx=PickedX()
obj2_picky=PickedY()
Circle PickedX() -5,PickedY()+5,10,ON
If Distance(objx,objy,obj2_pickx,obj2_picky)>60 Then
nopeus=2
Else
käännetään_vasemmalle(ukko)
nopeus=0
EndIf
If Distance(objx,objy,obj1_pickx,obj1_picky)>60 Then
nopeus=2
Else
käännetään_oikealle(ukko)
nopeus=0
EndIf
EndIf
MoveObject ukko,nopeus
DrawScreen
Forever
Function käännetään_vasemmalle(_obj)
Repeat
ObjectPick _obj
TurnObject _obj,3
DrawScreen
Until(Distance(ObjectX(_obj),ObjectY(_obj),PickedX(),PickedY())>80)
End Function
Function käännetään_oikealle(_obj)
Repeat
ObjectPick _obj
TurnObject _obj,-3
DrawScreen
Until(Distance(ObjectX(_obj),ObjectY(_obj),PickedX(),PickedY())>80)
End Function
Aa katsos, en tajunnut että se objekti poimii uudet koordinaatit siinä loopissa. Mutta siis niin, lagaaminen johtuu suurelta osin siitä että kutsut aina DrawScreeniä joka loopin kierros. Otappa DrawScreenit pois noista funktioista, niin johan huomaat eron2324 wrote:Siis ei see jää ikuisesti sinne. laitan ton koko koodin niin ymmärrätte.
juu ja tiiän et ton kääntymisen ois voinu tehä yhelläki funktiol ,mut kokeilin nyt aluks saada toimii oikei=)
Jos nyt ymmärsin oikein, ongelma on siinä, että muu peli pysähtyy siksi aikaa kun objekti kääntyy? Tämä johtuu tietenkin siitä, että käännät objektia eri loopissa varsinaisen pelisi pääloopin sijasta. Saat sen korjattua korvaamalla tuon repeat..until loopin if-lauseella.20242 wrote:Juu nyt se toimii,mut mite saisin ton objektin kääntymää siihe oikeesee kulmaa,samanlail kun drawscreenin kanssa =)
Code: Select all
function kaannetaan_vasemmalle(_obj)
poimi objekti
if etaisyys_poimittuun < 80 then
käännä _obj
endif
end function