cb-hackers / cbEnchanted

A new runtime for CoolBasic
13 stars 3 forks source link

Ympyrä, kartta -törmäyksessä CollisionX ja -Y #105

Closed aXu-AP closed 12 years ago

aXu-AP commented 12 years ago

Vietinpä koko aamun etsieesä ongelmaa koodistani, kunnes löysin sen cbe:stä. CollisionX ja -Y palauttavat nollan, jos törmäystyyppi on ympyrä, kartta. Esimerkissä punainen pallo pitäisi ilmestyä aina törmäyskohtaan:

FrameLimit 60
DrawToWorld ON

Map=LoadMap("Media/cdm2.til", "Media/tileset.bmp")

Guy = LoadObject("Media\soldier.bmp", 72)
ObjectRange Guy, 32

SetupCollision Guy, Map, 2, 4, 2 //Vaihda ensimmäinen 2=>1

Repeat
    TurnObject Guy, (KeyDown(cbKeyLeft) - KeyDown(cbKeyRight)) * 4
    MoveObject Guy, (KeyDown(cbKeyUp) - KeyDown(cbKeyDown)) * 3

    CloneCameraPosition Guy
    DrawGame

    For i = 1 To CountCollisions(Guy)
        Color 255, 0, 0
        Circle CollisionX(Guy, i) - 5, CollisionY(Guy, i) + 5, 10
    Next i

    DrawScreen
Forever

Jännästi sama bugi toistuu alkuperäisellä cb:llä, mutta eihän cbe:n ole tarkoitus bugeja kopioida? ;)

valscion commented 12 years ago

CB:ssä pysähdystörmäys bugaa hyvin vahvasti enkä ole onnistunut saamaan sitä toimimaan myöskään cbE:ssä. Tässä tapauksessa olen vaan laittanut tuon toimimaan samalla tavalla kuin CB että ei palauta törmäyskoordinaatteja.

Pitänee korjailla jossain välissä.

aXu-AP commented 12 years ago

Eihän tässä ole kyse pysähdystörmäyksestä vaan ympyrä=>kartta törmäyksestä. Esimerkissänikin käytän liukutörmäystä.

valscion commented 12 years ago

Kas. Noh, kyllä tuon törmäyspisteen haun pitäisi melko helpolla onnistua. Koitanpa...

valscion commented 12 years ago

Oli se loppujen lopuksi melko yksinkertainen homma mutta sain vähän silti säädellä :P mutta nyt on tehty.

aXu-AP commented 12 years ago

Oikeastaan nyt kun miettii, törmäyspiste on ympyrälle aina

CollisionX = ObjectX + Cos(CollisionAngle) * ObjectRange
CollisionY = ObjectY + Sin(CollisionAngle) * ObjectRange
valscion commented 12 years ago

Eipä ole. Koska collisionangle palauttaa aina 0, 90, 180 tai 270 koska CB.

aXu-AP commented 12 years ago

Eiku joo tuohan pitää olla -Cos, koska CollisionAngle on seinästä poispäin. Ja +Sin oli oikein, koska maailmakoordinaatit. Joko nyt meni oikein?

valscion commented 12 years ago

ei mennyt. CB asettaa ympyrätörmäystarkistuksissakin törmäyskulman aina vain jonkin seuraavista: 0, 90, 180, 270. Saman tekee cbE. Jos haluat oikeat asteet, käytät nyt noita uusia törmäyspaikkoja ja lasket getanglella sen kulman.

aXu-AP commented 12 years ago

Jos nyt viittaat laatikon kulmaan törmäämiseen, niin CB laskee mainitsemallani tavalla törmäyspisteen, eli sen ei ole tarkoituskaan olla oikeassa kohdassa ;) Ympyrä-ympyrä-törmäyksissä puolestaan collisionangle tuottaa tarkkoja lukuja muistaakseni. EDIT: Eikun hetkinen, mietin juuri laatikkotörmäystä, cb:ssähän ei tosiaan pallo-kartta-törmäys tuottanut törmäyskoordinaatteja :D eli taidat olla oikeassa.

valscion commented 12 years ago

Ei tuota.

valscion commented 12 years ago

Eikun niin siis tuottaa joo. Mutta karttaan törmäys ei