Hej, Har inte alls arbetat med silverlight, men ändå: Om objektet ska konstant vara i rörelse så har du ju alltid en riktning på det. bara att forsätta i en riktning tills nya koordnater kommit in. När de kommit in så räkna ut ritningen objektet måste ha för att komma dit och fortsätt sedan tills nya koordinater kommit in... Tack för input! <b>>>>Det blir lite enklare att svara om du ger ett helt konkret exempel. Här har du exempel på rätt OK animering med källkod: Niklas JanssonRealtidsanimeringar...?
Jag håller på att labba lite med en applikation som ska flytta grafiska objekt baserat på indata från (tex) socket.
Det är inga problem att uppnå "grundfuntionalitet", genom att helt enkelt sätta x och y på objektet. Dock blir det hackigt, precis som man skulle gjort det med VB6 eller liknande... ;). Jag är en total newbe, men det verkar som olika typer av animationer är det man ska använda för att få så smooth förflyttning som möjligt, men det blir trixigt (omöjligt?) ifall man inte har slutpositionen för animationen.
Animationen behöver egentligen inte vara 100% realtid, men mer än en halvsekunds eftersläpning är inte OK.
Går det att göra en animation baserad på en vektor som fylls på allt eftersom man får indata?
Som ni märker - jag har inte alla silverbesticken i lådan... All input i ämnet mottages tacksamt! :)
Tack på förhand
Peter
PS - Silverlight är heller ingent måste, WPF (XBAP) lösningar är också OKSv: Realtidsanimeringar...?
Det du säger är i princip att du vill ha animationer mellan dina snapshots. Men då måste animationen börja först när nästa snapshot kommer - inte sant?
Alltså:
Frame 1, x=10
Frame 2, x=20
Då vet du inte hur förflyttningen mellan 1 och 2 ska se ut förrän i Frame 2.
Det finns då två möjligheter:
1. Låt det vara en eftersläpning motsvarande så ofta du uppdaterar x och y. I princip behöver du hålla reda på det föregående värdet och det nya värdet, och sen göra en animering som är klar till nästa frame.
2. Använd någon typ av prediktion. Om du har x(0)=0, x(1)=10, så kan du gissa dig till att x(2)=20.
Detta går ju förstås att göra på många olika sätt, linjärt brukar vara helt ok.
Det blir lite enklare att svara om du ger ett helt konkret exempel. (För övrigt verkar det vara ett jävligt intressant projekt =) )Sv:Realtidsanimeringar...?
Eller är det så att när någon skickar in koordinater så ska objektet faktiskt nå dit?
Hur ofta är det beräknat att nya koordinater kommer in och kommer det att vara en konstant ström av nya korrdinater?Sv: Realtidsanimeringar...?
>>Det blir lite enklare att svara om du ger ett helt konkret exempel.
Det handlar om verkliga fordon som rör sig. Detta ska visas i en applikation.
>>Hur ofta är det beräknat att nya koordinater kommer in och kommer det att vara en konstant ström av nya korrdinater?
Hur ofta nya positioner kommer in kommer vara konfigurerbart, men det bör vara någonstans mellan 2 till 10 gånger i sekunden. Finns det många objekt, får hastigheten ställas ner av naturliga skäl... Vet inte ifall jag kommer få uppdateringar även ifall fordonen står still.Sv:Realtidsanimeringar...?
>Det handlar om verkliga fordon som rör sig. Detta ska visas i en applikation.</b>
Okej, jag tänkte mer på ett konkret exempel med koordinater.
<b>Hur ofta nya positioner kommer in kommer vara konfigurerbart,</b>
Det viktigaste är egentligen: Vet du hur lång tid det dröjer till nästa koordinat? Är det konstant i intervall, osv?
Det låter ju som att en prediktionslösning mycket väl kan fungera.
Låt säga att fordon 1 skickar sin info vid t = 0, 1, 2, 3, 4, (tiondelar), och att du då får (vi tar bara en koordinat, det blir helt analogt med två)
x = 1.1, 2.0, 2.4, 3.6, 5.0
Det du gör vid t = 0 är då helt enkelt att sätta positionen till x = 1.1, det finns inget annat att göra. Dessutom får du anta att hastigheten är v = 0, det finns inte heller något annat att anta. Din prediktion är då att vid t = 1 så är x = 1.1 och v=0, så du gör ingen animering.
Vid t = 1 får du ny information om att x = 2.0. Du kan då räkna med att v = 2.0 - 1.1 = 0.9.
Nu har du några alternativ för att göra din animation;
1. Flytta koordinaten till x = 2.0, ignorera v. Det ger det hackiga intrycket.
2. Flytta koordinaten till x = 2.0, men börja använd v, så påbörja en animation som går mellan x= 2.0 och x = 2.0 + v = 2.9. Då kommer din animering alltså gå från 2.0 till 2.9 mellan t=1 och t=2. Det gör att den måste hoppa tillbaks till 2.4 eftersom den bromsas in, det gör det hela hackigt, men i allmänhet mindre hackigt.
3. Flytta inte koordinaten, utan låt den släpa efter. Gör animeringen så att den går från 1.1 till 2.0 mellan t=2 och t=3 istället. Då kommer t = 3 få den korrekta positionen för t=2, men det kommer bli helt jämnt. Om du har 2 positioner/sekund ger det en eftersläpning på en halvsekund.
4. Kombinera prediktion och eftersläpning. När du då får 2.9 istället för 2.4 så räknar du ut den nya hastigheten; v = 0.4, vilket ger nästa x-värde till 2.8; vilket innebär att du får animera det som att den rör sig bakåt i det fallet.
5. Använd en högre ordningens prediktion; Lägg till acceleration, och ta fram bättre gissningar på hastigheten.
Som du ser är det knappast uppenbart hur man ska göra det. Sv: Realtidsanimeringar...?
(Ingen aning om hur den ser ut :))
http://bubblemark.com/
ps. Detta var inte skitsvårt att hitta.
Jag googlade Silverlight animation, detta var andra träffen. ds.Sv:Realtidsanimeringar...?
Tackar!
Ola Lindfeldt
Vad hade den med realtids-indata att göra?