Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: muu kieli: Pallon nopeus (as3)

jo123 [07.03.2011 12:08:38]

#

Tätä on luultavasti kysytty ennenkin:

As3:ssa liikkuvat objektit toteutetaan siten että on funktio joka ajetaan kerran framessa. Nyt kuitenkin jos esim. pallon vauhti on kovin kova saattaa se liikkua jonkun objektin yli koskematta siihen ollenkaan. Miten tämä ongelma kannattaisi kiertää.

Itselleni nyt tulee lähinnä mieleen että loopattaisiin pallon liikkuminen pikseli kerrallaan (ilman päivittymistä ruutuun) ja pallon nopeus määrittyisi siitä kuinka monta kierrosta looppia mentäisiin aina yhdessä framessa.

Toivottavasti ymmärrätte ongelman ja selitykseni. Kiitos jo etukäteen!

Edit: Ratkaisuni onglema on tietenkin että nopeuden säädöstä tulee varsin portaallista.

Grez [07.03.2011 12:43:19]

#

Itse varmaankin vaan matemaattisesti testaisin, että törmääkö objektit ennen seuraavaa framea. Jos muut objektit on staattisia niin homma on melko helppoa. Jos taas kaikki liikkuu, niin olisi hyvä tietää millä tavalla objektit liikkuu ja minkämuotoisia ne on.

Lebe80 [07.03.2011 12:54:14]

#

jo123:

Tee listeneri enter_framelle, jos oikeasti haluat sen laskea kerran framessa. Tietenkin järkevämmin tämä menee niin, että teet yleensäkin jonkun "pääfunktion", jota ajetaan kerran framessa, ja jossa kutsutaan törmäyksen tarkistuksia yms.

Pallojen törmäystä tuskin tarvitsee "pikseli kerrallaan" tutkia, kunhan nopeudet eivät kasva niin suureksi, että pallot pääsevät yhden framen aikana kulkemaan toistensa lävitse.

jo123 [07.03.2011 13:05:34]

#

Grez kirjoitti:

Itse varmaankin vaan matemaattisesti testaisin, että törmääkö objektit ennen seuraavaa framea. Jos muut objektit on staattisia niin homma on melko helppoa. Jos taas kaikki liikkuu, niin olisi hyvä tietää millä tavalla objektit liikkuu ja minkämuotoisia ne on.

Kimpoaminen seinästä nyt onkin helppoa tehdä matemaattisesti, mutta kun kysessä on monimutkaisempi kohde johon pallo törmää niin menee varsin hankalaksi. Käytän luokkaa joka osaa tarkistaa törmäykset pikselin tarkasti. Luokan tomimisen perjaatteena on toki että pallon täytyy käydä juuri kyseisessä pisteessä, jossa törmäys ensimmäisen kerran tapahtuu. Jos siis haluaa pallon ensimmäisen törmäyssijainnin. Pallon ei kuitenkaan tarvitse kimmota realistisesti muutakuin ympyrän muotoisista staattisista objekteista (ei siis minkä tahansa muotoisista/liikkuvista).

Voin selittää lisää jos ette ymmärrä...

Grez [07.03.2011 13:16:02]

#

Niin, et edelleenkään kertonut minkä muotoisia ne muut objektit on ja liikkuuko ne.

Jos kerran sinulla on valmis luokka, niin ratkaisusi on ihan toimiva. Voisit tehdä vaikka 10 tai 100 stepissä kunkin objektin liikkumisen framejen välillä riippuen mikä riittää. Ainoa ongelma voisi olla laskentatehon riittävyys.

jo123 [07.03.2011 13:24:23]

#

Juu, objektien muoto on sen verran monimutkainen että sen selittäminen ei liene tarpeen. Niin ja ne kyllä liikkuvat. Voisin sitten jakaa tuon framen vaikkapa 10 stepsiin. Kiitos avusta.

Chiman [07.03.2011 14:20:15]

#

Törmäysten tehokkaasta havaitsemisesta on varmasti kirjoitettu paljon pätevää ohjeistusta, mutta koska oma ideointi on hauskempaa:

Miten olisi kaksi aputaulukkoa, joissa toisessa objektit ovat järjestettynä sijainnin x-koordinaatin mukaan ja toisessa y-koordinaatin mukaan. Joka frame tarkistat päteekö järjestys vielä

...
if (a[i]->x < a[i+1]->x)
...

Jos ei, tutkit tarkemmin risteävätkö objektien liikeradat.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta