Donnerstag, 29. Mai 2008

Animation with C#

So jetzt sitz ich ja schon längere Zeit vor C# und versuche damit Animation zu erstellen . Die größten Probleme sind aufjedenfall das alles Dynamisch zu machen.

Soviel ich weiß gibt es 3 Möglichkeiten eine Animation zu handeln .

1. über DoubleAnimation
2. über DoubleAnimation mit Storyboard
und 3. mit Composition Target (was mein persönlicher favorite ist)

kurz zu meinem "gelösten Problem"

ich wollte ein Objekt animieren (Canvas, Label, etc...) und das möglichst einfach verschieben ohne irgendwelche Klassen zu instanzieren

Hier meine Lösung




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public partial class ScrollContainer : UserControl
{

private double _startPos, _destx, _deltax, _desty, _deltay, _speed;

private long _framecounter;
private bool _isDragging;
private double Cord;


private Point _point;


private void canvasContent_Loaded(object sender, RoutedEventArgs e)
{

CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);


canvasContent.RenderTransform = this._translation;


}
#region Rendering
/* Rendering Event
* Wird immer durchgeführt in eigenem Thread
* Jedes Frame wird hier durchgeparsed
*/


void CompositionTarget_Rendering(object sender, EventArgs e)
{
if (_framecounter++ == 0)
{
/// Erstes Frame

}


TimeSpan _currentTime = this._stopwatch.Elapsed;
double _elapsedTime = (_currentTime - this._prevTime).TotalSeconds;

_deltax = _destx - _translation.X;

_deltay = _desty - _translation.Y;

_translation.X += _deltax / _speed;
_translation.Y += _deltax / _speed;

_offset = _translation.X;





}
#endregion
}





Jetzt kann man ganz einfach üser destx = (Koordinaten); oder desty = (Koordinaten);

das Objekt mit einer kleinen Verzögerung verschieben

Keine Kommentare: