Just nu i M3-nätverket
Gå till innehåll

Översätta gradtal till något annat?


.M

Rekommendera Poster

Jag roar mig med att bygga ett litet spel. Och jag vill flytta min sprite i en riktning.

 

Jag vet antalet grader jag vill flytta spriten från där den står i dag, till exempel 45.0. Men för att flytta spriten så behöver jag sätta om X och Y. Så om min sprite står på X = 0 och Y = 0 och jag vill flytta den 45 grader så behöver jag antagligen sätta X = X+1 och Y = Y+1. Men hur räknar jag fram detta på tjusigast sätt egentligen? Låt oss säga att jag vill flytta min sprite 135.6 grader? Hur räknar jag ut vad jag ska addera till X och Y?

 

Något sa mig tt jag borde använda sin och cos, men jag fick det inte att fungera.

Länk till kommentar
Dela på andra webbplatser

Om vi vänder oss lite mot skolmatematik så kanske det öppnar upp sig en lösning för dig.

 

Rita upp en enhetscirkel.

Rita in din sprites position i denna cirkel. Rita in den blivande positionen.

 

Lite cos/sin-formler borde bli uppenbara.

Du kan med dessa räkna fram en relation mellan sträckan från centrum på enhetscirkeln och avståndet den ska flyttar i x- och y-led. Nästa steg torde att skala om denna relation till de avstånd/upplösning du har på skärmen din, dvs se hur stor din cirkel är på skärmen du ska flytta den på och räkna om formlerna för denna.

 

Klarnar det?

Länk till kommentar
Dela på andra webbplatser

Bara för att var klar på det hela, när du menar flytta en sprite 90 grader ska denna förflyttning ske utmed en cirkel, med ett centrum någonstans?

 

Du vet hur långt "ben" spriten har till centrum på cirkeln?

Säg att du har en sprite på noll grader. I enhetscirkeln ligger den då x-axlen, dvs cosinus

x = 1

y = 0

 

 

Vi drar den upp 90 grader, till y-axeln, dvs sinus.

Då vet vi att 

x = 0

y = 1

dvs deltaX = -1

deltaY = +1

 

Om vi löser detta med cos/sin blir det helt enkel

y = sin(v)

x = cos(v)

för hela varvet runt på enhetscirkeln.

 

Dvs om du vet att benet på din vektor är 10 pixlar till centrum, med exemplet 90 grader, vet du att den ska flytta i x led -1*10 och i y-led +1*10

 

Utan att tänka i programmeringsbanor, utan rent matematiskt, är det så jag skulle göra.

 

och ja, enhetscirkeln, går du runt cirkeln går du motsols. Dvs om 0 grader (1,0), 90 grader (0,1).

 

är jag på rätt spår in din hjärna?

Länk till kommentar
Dela på andra webbplatser

@NoWin

går säkerligen. Principen blir väl den samma, räkna fram riktning och vinkel? Resultatet av det ovan blir ju ju i sig en vektor för din sprite, beräkningarna torde vara desamma.

 

Men kanske finns enklare väg, man behöver kanske inte implementera om hjulet så att säga.

Länk till kommentar
Dela på andra webbplatser

Går det inte att använda vektorer?

Det finns säkert massor av spännande ramverk och liknande man kan använda för att göra det enkelt med den här typen av utveckling. Men jag gör nu ett litet projekt där jag gör det mesta för hand med syftet att lära mig mer om de formler och algoritmer som används. Egentligen skulle jag kunna använda en färdigspelmotor som löser precis det här åt mig, men det här är inte ett seriöst projekt, utan mest för labb där jag övar mig på saker och ting.

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...