CoolPhysicsEngine - Fysiikkakirjasto CB:lle -tekniikkademo#2

Jaa meneillään olevat projektisi tai valmiit pelit muun yhteisön kanssa täällä.
TheFish
Developer
Developer
Posts: 477
Joined: Mon Aug 27, 2007 9:28 pm
Location: Joensuu

Re: CoolPhysicsEngine - Fysiikkakirjasto CB:lle -tekniikkademo#2

Post by TheFish »

Katselin tuota koodia vähän ja yksi kohta jäi vähän mietityttämään (todennäköisesti itse vain evotan mutta kysympä kuitenkin...). Ko. koodinpätkä:

Code: Select all

 //Lasketaan painopiste
    tmpArea# = polygonArea(pG\ID%)
    tmpCntrX# = polygonCentroidX(pG\ID%, area#)
    tmpCntrY# = polygonCentroidY(pG\ID%, area#)
    pG\cntrID% = initVector(tmpCntrX#, tmpCntrY#)
Noissa pylygonCentroid:eissa käytettyä [area#] muuttujaa ei ole käsittääkseni alustettu missään, ja koska yläpuolella määritellään muuttuja [tmpArea#], jota ei käytetä missään, niin onkohan kyse typosta vai jostain ovelasta tempusta?
CoolBasic henkilökuntaa
Kehittäjä
User avatar
KillBurn
Advanced Member
Posts: 339
Joined: Wed Aug 29, 2007 5:02 pm

Re: CoolPhysicsEngine - Fysiikkakirjasto CB:lle -tekniikkademo#2

Post by KillBurn »

10 Kappaletta oli asteroideja ja fps ei tippunut.15 kappaletta ja fps oli 28.
Sumu Games: Sam, Ur eye!
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: CoolPhysicsEngine - Fysiikkakirjasto CB:lle -tekniikkademo#2

Post by SPuntte »

TheFish wrote:Katselin tuota koodia vähän ja yksi kohta jäi vähän mietityttämään (todennäköisesti itse vain evotan mutta kysympä kuitenkin...). Ko. koodinpätkä:*nips naps* Noissa pylygonCentroid:eissa käytettyä [area#] muuttujaa ei ole käsittääkseni alustettu missään, ja koska yläpuolella määritellään muuttuja [tmpArea#], jota ei käytetä missään, niin onkohan kyse typosta vai jostain ovelasta tempusta?
Nämä ovat juuri näitä :oops:

Se on siis typo, kiitoksia kun löysin sen. Päätin jossain vaiheessa merkitä kaikkia väliaikaisia funktioissa käytettäviä muuttujia tmp-etuliitteellä. Tosin kaikki eivät kyllä sitä noudata.. Kummallista vain on, ettei se korjaa tuota ilmennyttä ongelmaa :(

Hitto, kun ForceVariableDeclarationin saisi päälle ilman, että kääntäjä heittää erroria määrittelemättömistä tyypi-handleista. Jos ne yrittää määritellä ennen käyttöä, kääntäjä antaa kielioppivirheilmoituksen "ASD already defined as other type on line X". Kokeilkaapa vaikka. Osaako joku ratkaista tai kiertää tämän ongelman?

Toinen kummallisuus(?), jonka löysin, on result# -muuttujan ja result(SIZE) -taulukon mahdollinen päällekäisyys(?). Ko. muuttuja esiintyy ainakin funktioissa polygonArea(), polygonCentroidX() ja polygonCentroidY().

Voisin muuten päivitellä tuota koodia nettiin...
Last edited by SPuntte on Sun Aug 24, 2008 12:18 pm, edited 2 times in total.
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
Valtzu
Active Member
Posts: 115
Joined: Sun Aug 26, 2007 2:40 pm
Location: Sauvo
Contact:

Re: CoolPhysicsEngine - Fysiikkakirjasto CB:lle -tekniikkademo#2

Post by Valtzu »

Tuolla lib_Vektorissa funktiossa RotateVector käytetään vX# ja vY# muuttujia, vaikka kyseessä pitäisi varmaan olla tyyppikokoelman jäseneen viittaavat muuttujat vect\vX# ja vect\vY#.

Code: Select all

//Pyörittää vektoria annetun kulman verran
Function rotateVector(v%, ang#)
    vect.VECTOR = ConvertToType(v%)
    vect\vX# = vX# * Cos(ang#) - vY# * Sin(ang#)
    vect\vY# = vX# * Sin(ang#) + vY# * Cos(ang#)
EndFunction
->

Code: Select all

//Pyörittää vektoria annetun kulman verran
Function rotateVector(v%, ang#)
    vect.VECTOR = ConvertToType(v%)
    vect\vX# = vect\vX# * Cos(ang#) - vect\vY# * Sin(ang#)
    vect\vY# = vect\vX# * Sin(ang#) + vect\vY# * Cos(ang#)
EndFunction

EDIT: Niin ja tosiaan; koska CB:ssä taulukot ovat globaaleja, kannattaa välttää käyttämästä samannimisiä taulukoita ja muuttujia, jos se nyt yleensäkään on edes mahdollista. ( result() ja result# )
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: CoolPhysicsEngine - Fysiikkakirjasto CB:lle -tekniikkademo#2

Post by SPuntte »

Valtzu wrote:Tuolla lib_Vektorissa funktiossa RotateVector käytetään vX# ja vY# muuttujia, vaikka kyseessä pitäisi varmaan olla tyyppikokoelman jäseneen viittaavat muuttujat vect\vX# ja vect\vY#.
No katos pirhana. Sitä funktiota ei onneksi vielä käytetä missään. Itse asiassa kahdessa seuraavassa funktiossa (vectorRotatedX ja -Y) oli sama ongelma, mutta ne korjasin itse. Copypastesta aihetunut tuo virhe :/ Nyt on sekin päivitetty nettiin. Lataus ylempänä olevasta viestistäni.
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
Dande
Active Member
Posts: 193
Joined: Tue Aug 28, 2007 4:30 pm

Re: CoolPhysicsEngine - Fysiikkakirjasto CB:lle -tekniikkademo#2

Post by Dande »

SPuntte wrote: Hitto, kun ForceVariableDeclarationin saisi päälle ilman, että kääntäjä heittää erroria määrittelemättömistä tyypi-handleista. Jos ne yrittää määritellä ennen käyttöä, kääntäjä antaa kielioppivirheilmoituksen "ASD already defined as other type on line X". Kokeilkaapa vaikka. Osaako joku ratkaista tai kiertää tämän ongelman?
?

Code: Select all

Type TestiTyyppi
    Field foo
    Field bar
EndType

Dim joku.TestiTyyppi
joku=New(TestiTyyppi)
Itse en ainakaan ole huomannut mitään ongelmia, kun olen tässä ForceVariableDeclerationin kanssa koodaillut.
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: CoolPhysicsEngine - Fysiikkakirjasto CB:lle -tekniikkademo#2

Post by SPuntte »

Galgoneer wrote:
SPuntte wrote:EPIC MULTIFAIL
?

Code: Select all

Type TestiTyyppi
    Field foo
    Field bar
EndType

Dim joku.TestiTyyppi
joku=New(TestiTyyppi)
Itse en ainakaan ole huomannut mitään ongelmia, kun olen tässä ForceVariableDeclerationin kanssa koodaillut.
Jahas, vastaus on yksinkertainen: evo. Olen siis määritellyt ne väärin. Tähän tapaan:

Code: Select all

Type TestiTyyppi
    Field foo
    Field bar
EndType

Dim joku //ei mitään tässä perässä
joku=New(TestiTyyppi)
On se kiva, kun jatkuvasti oppii lisää. Tuo .TYYPPIKOKOELMA-liite onkin siis vähän kuin mikä tahansa datatyyppisymboli.. Nyt vasta tajusin sen :P
EDIT:

Koodit päivitetty. Nyt ohjelma kääntyy ForceVariableDeclaration päällä. Lataus samoista linkeistä:
http://koti.mbnet.fi/spuntte/CB/CoolPhy ... ttori_1.CB
http://koti.mbnet.fi/spuntte/CB/CoolPhy ... Vektori.CB
http://koti.mbnet.fi/spuntte/CB/CoolPhy ... mo%232.exe

CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
otto90x
Advanced Member
Posts: 349
Joined: Mon Aug 27, 2007 9:00 pm
Location: Lapinjärvi, Finland
Contact:

Re: CoolPhysicsEngine - Fysiikkakirjasto CB:lle -tekniikkademo#2

Post by otto90x »

Hienoltahan tuo vaikuttaa. Ja eipä tuossa näytä hidastelevan kuin cb:n piirtokomennot. Ilman polygonien piirtoa, 150 polygonia päivittyi ihan tasaisesti 30 FPS. Piirron kanssa vain 15. Kun kuvat saadaan valjastettua polygonien jatkuvaan piirtoon niin saadaan nopeus ihan tarpeeksi hyväksi.
Otto Martikainen a.k.a. MetalRain, otto90x, kAATOSade.
Runoblogi, vuodatusta ja sekoiluja.
SPuntte
Tech Developer
Tech Developer
Posts: 650
Joined: Mon Aug 27, 2007 9:51 pm
Location: Helsinki, Finland
Contact:

Re: CoolPhysicsEngine - Fysiikkakirjasto CB:lle -tekniikkademo#2

Post by SPuntte »

Noniin, löysin ja liiskasin viimein tuon hyvin ärsyttävän bugin, joka aiheutti sen, että kappaleiden painopisteet menivät sinne tänne. TälläKIN kertaa se oli typo ja vieläpä tyyppi-instanssin kenttäviittauksessa. Ihme ettei se aiheuttanut kenelläkään MAVia :S

Tein myös joitakin muita muutoksia. Joku on saattanut huomata LOGIC-vakion, joka säätää logiikan suorituskertojen määrää piirrettyä framea kohti. Säädin simuloinnin aika-askeleen mukautuvan logiikan suorituskertoihin, jolloin kappaleiden nopeus ei muutu, jos LOGIC-vakiota muuttaa. Kuten otto90x, CB:n piirtokomennot vievät tuosta suoritusajasta eniten, joten kokeilkaapas nostaa tuota LOGIC-vakiota. Missä arvossa se alkaa noilla oletuksellisilla 4 polygonilla tiputtaa FPS:n alle 30:n?

Päivitetty koodi löytyy samasta paikasta:
http://koti.mbnet.fi/spuntte/CB/CoolPhy ... ttori_1.CB
CoolBasic henkilökuntaa
Tech-kehittäjä
CoolBasic Classic, Cool VES

CoolPhysicsEngine | MissileSystem | Jana-ympyrä -törmäys | cbSimpleTexture | CoolCPLX
Post Reply