Avatar billede thingholm.dk Nybegynder
14. maj 2002 - 17:07 Der er 8 kommentarer og
1 løsning

COS og SIN

Hej

Da jeg er i gang med at lave et spil, hvor man skal kunne skyde en kanonkugle afsted, vil jeg lige høre om nogen kan hjælpe med noget COS og SIN?

Jeg har 3 variabler; fart (0-100), vinkel (-90 -> 90 grader) og udgangsposition (global x og y koordinat).

Kan nogen hjælpe mig med at udregne retningen?

VH

Anders
Avatar billede thingholm.dk Nybegynder
14. maj 2002 - 17:07 #1
Her er de rigtige navne for mine variabler:

fart: power
vinkel: angle
Avatar billede Slettet bruger
14. maj 2002 - 17:08 #2
Du har vel også en tid?
Avatar billede thingholm.dk Nybegynder
14. maj 2002 - 17:09 #3
tid?
Avatar billede Slettet bruger
14. maj 2002 - 17:14 #4
Ja jeg går udfra, at det du leder efter er en formel, så du kan bestemme x, y positionen for din kanonkugle til en given tid?
Avatar billede thingholm.dk Nybegynder
14. maj 2002 - 17:15 #5
nej, den skal skyde ud fra kanonen - tid er ligegyldigt i denne sammenhæng.
Avatar billede Slettet bruger
14. maj 2002 - 17:21 #6
Jvf. min fysikbog skulle:

$y = $x * tan($vinkel) - (0,5 * (($g * $x^2) / ($starthastighed^2 * cos^2( $vinkel))))

Give dig højden for kuglen til ethvert $x. $g er iøvrigt tyngdeaccelaration (9.82 m/s^2).
Avatar billede baitianlong Nybegynder
14. maj 2002 - 17:27 #7
Hvis du allerede har vinklen, ...er det stykke kuglen skal bevæge sig på, på x og y aksen, dette:

x_step = power*Math.cos(angle);
y_step = power*Math.sin(angle);

Du kan så skrive dette på kuglen når den bliver skudt af:

onClipEvent(enterFrame) {
this._x = this._x + x_step;
this._y = this._y + y_step;
}
Avatar billede gotcha Nybegynder
15. maj 2002 - 01:11 #8
Forestil dig en retvinklet trekant, hvor vi benævner siderne hhv. a,b og c (a er den vandrette side, b den lodrette og c hypotenusen).

Du kender længden på hypotenusen c, som i dit tilfælde er udgangshastigheden. Imidlertid er du nødt til at opløse denne i de to komposanter x og y for at kunne anvende det i Flash. Vi har følgende (v er udgangsvinklen):

cos(v) = x/c <=> x = c*cos(v)

sin(v) = y/c <=> y = c*sin(v)

De to variable x og y er så dine udganshastigheder i hhv. vandret og lodret retning, og du behøver sådan set bare at tilføje accelerationen hver frame (læg den til den lodrette hastighed og lad den vandrette hastighed være nogenlunde konstant, da den kun påvirkes af luftmodstanden) for at få den ønskede bevægelse. Prøv f.eks. at indsætte følgende i frame 1 på hovedtidslinien og hav samtidig et movie clip med instance-navnet ball:

v = -45;
c = 20;
trans = Math.PI/180;
a = 0.7;
vx = c*Math.cos(v*trans);
vy = c*Math.sin(v*trans);

this.onEnterFrame = function () {
    ball._x += vx;
    ball._y += vy;
    vy += a;
}

Hvis du ønsker at affyre en kanonkugle o.lign. bliver du naturligvis nødt til at definere eventhandleren ved tryk på en knap og samtidig udregne vinklen dynamisk vha. rotationen af kanonen. Desuden er det nok en god idé at indsættte en slider til at justere værdierne af c (accelerationen a er som sagt en konstant, som du selv definerer).

Mvh Morten
Avatar billede loonz Nybegynder
10. juni 2002 - 23:46 #9
Lukketid?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester