Dela via


Tröghetsmekanik

Tröghet används för att utföra beräkningar för att animera objektflytt och för att möjliggöra stöd för allmän användbarhet i program som innehåller Windows Touch. Det här avsnittet illustrerar följande funktioner som aktiveras av tröghet.

  • En kort översikt över tröghetsfysik.
  • Jämna ut objektanimeringen med hjälp av hastighets- och inbromsningsegenskaperna.
  • Jämna ut objektanimeringen med hjälp av en förskjutningsegenskap.
  • Studsar från skärmkanterna med elastiska gränser.

Översikt över tröghetsfysik

Tröghetsprocessorn använder en enkel fysikmodell som innehåller en position, ett inbromsningsvärde och en initial hastighet. Tiden används som dynamiska indata till modellen för att fastställa den aktuella positionen för ett objekt som förskjuts. Följande diagram och formel beskriver fysikmodellen som används för att beräkna objektpositioner.

bild som visar grafen och formeln som används för att beräkna objektpositioner

I formeln som används för att beräkna den aktuella positionen (x) multipliceras den initiala hastigheten (v) med tiden som förflutit (t) och minskas med decelerationsfaktorn (d) gånger kvadrattiden. Detta resulterar i smidig objektceleration. I föregående bild vid den initiala (längst till vänster) delen av kurvan rör sig objektet snabbt eftersom dess aktuella hastighet är den initiala hastigheten. Vid den sista (högra) delen av kurvan har objektet helt stoppats eftersom dess hastighet är 0. Objekthastighetsberäkningar för x-hastighet, y-hastighet och rotationshastighet använder alla den här formeln för beräkningar.

Allt avstånd som används för tröghetsprocessorn är relativt. Om du vill använda skärmkoordinater skickar du skärmkoordinater till manipulationsprocessorn (eller tröghetsprocessorn). Om du vill använda absoluta koordinater skickar du dem till den processor som du använder. Oavsett vilka värden du använder använder manipuleringsprocessorn millisekunders klockfästingar för bearbetning av tiden. Dessa värden kan antingen skickas direkt till tröghetsprocessorn med hjälp av metoden ProcessTime eller genom att använda standardtidsstämpeln via anrop till Process.

Smooth Object Animation med hjälp av egenskaper för hastighet och inbromsning

Du kan aktivera smidig animering genom att direkt interagera med fysikmodellen genom att ange hastighets- och incelerationsvärdena i inertiaprocessorgränssnittet och sedan anropa Process. Om du anropar Process utlöses objektmanipuleringar som i sin tur ska orsaka uppdateringar av användargränssnittet. Objekthastighetsvärden som skickas till tröghetsprocessorn tas vanligtvis från manipulationsprocessorn när det är klart. Inbromsningsvärdet beror på hur länge du vill att objektet ska animerats för och de enheter som du använder för dina beräkningar. Eftersom värdena är beroende måste du ibland skala indatahastigheten från manipulationsprocessorn och använda godtyckliga värden för inbromsning. Följande värden är typiska för olika scenarier där du skickar centipixel-värden från egenskaperna x och y för TOUCHINPUT- struktur till manipulationsprocessorn.

Scenarium Egenskapsuppsättning Inbromsningsvärde Typisk hastighetsinmatningsskalning Anteckningar
Översättning DesiredDeceleration 0.003f Ingen. Om du använder det här värdet resulterar det i animeringar med längre avstånd när du använder pekindata.
Översättning DesiredDeceleration 0.001f 1/20: e initiala hastigheten för touch-indata, ingen för musindata Om du använder det här värdet animeras ungefär en sekund med typiska hastighetsindata.
Översättning DesiredDeceleration 0,5f Ingen Med det här värdet får du en naturlig känsla för animering på stora Windows Touch-skärmar.
Rotation DesiredAngularDeceleration 0.000015f Radianer konverterade till grader. Om du använder det här värdet resulterar det i längre rotationsanimationer när du använder pekindata.
Rotation DesiredAngularDeceleration 0.00001f 1/40:e rotationsdeltat för touch-indata, ingen för musindata Det här värdet finns i radianer så du måste använda mycket små inbromsnings- och hastighetsvärden.
Rotation DesiredAngularDeceleration 0.000005f Ingen Det här värdet har en naturlig känsla på stora Windows Touch-skärmar.

 

Smooth Object Animation med egenskapen Desired Displacement

I vissa fall vill du inte använda användarens indata för objektförskjutning, men du vill ändå att ett objekt ska animeras smidigt över skärmen. I det här fallet kan du använda förskjutningsegenskaper i tröghetsprocessorn för att låta processorn beräkna den initiala hastigheten för att flytta ett objekt över skärmen.

Kontrollera objektposition med elastiska gränser

När du har ett objekt som rör sig över skärmen vill du vanligtvis att det ska stoppas innan det hamnar utanför användarens synvinkel. Tröghetsprocessorn möjliggör den här funktionen genom egenskaperna gräns och elastisk marginal. Följande bild illustrerar de olika gräns- och marginalegenskaperna i ett typiskt program.

skärmbild som visar egenskaper för gränser och elastisk marginal

Du anger vänster, övre, höger och nedre gränser och elastiska marginaler för ditt program, och tröghetsprocessorn hanterar att hålla gränssnittselement inom gränserna. När ett objekt når en elastisk marginal saktar det ned tills det når gränsen. Den kommer aldrig att lämna den marginalen igen under tröghet, men kommer fortfarande att röra sig tills objektets vinkelräta tröghetskomponent saktar in till 0. I bilden förskjuts en cirkel mot den vänstra elastiska gränsen. Den fasta pilen visar riktningen för manipuleringen; den fasta cirkeln är objektets initiala position. den fasta pilen är de ändringar som gjorts innan cirkeln träffar den elastiska marginalen; den streckade pilen visar var tröghetsprocessorn manipulerar cirkeln när den träffar marginalen; och de streckade cirklarna visar var objektet stannar.

Not

Om du anger marginalegenskaperna flyttas gränserna utåt. Om din övre gräns till exempel är inställd på 50 och sedan anger den övre elastiska marginalen till 10 blir din övre gräns i praktiken 40.

 

Hantering av tröghet i ohanterad kod

Tröghet

manipulationer