在前一篇關於sprite的文章中,咱們介紹了它的基本狀況和基本用法,在本文中,咱們將在前文的基礎上,使用sprite實現一個小效果。這個效果就是旋轉木馬的特效,以前我也寫過一篇文章,那是使用橢圓方程來實現的。app
經過以上兩步就實現了旋轉木馬的效果,原理相信你們都明白,從不一樣角度去觀察sprite而形成選擇的視覺感受。固然,你也能夠構造更復雜的Camera運動路徑來實現更多的效果。blog
1
namespace
BalderSpriteDemo
2
{
3
public
partial
class
MainPage : UserControl
4
{
5
Camera ca;
6
public
MainPage()
7
{
8
InitializeComponent();
9
DispatcherTimer timer
=
new
DispatcherTimer();
10
timer.Interval
=
TimeSpan.FromMilliseconds(
20
);
11
timer.Tick
+=
new
EventHandler(timer_Tick);
12
timer.Start();
13
Game game
=
new
Game()
//
構造一個640X480大小的場景
14
{
15
Width
=
640
,
16
Height
=
480
17
};
18
ca
=
new
Camera()
//
定義一個攝像機
19
{
20
Position
=
new
Balder.Math.Coordinate(
0
,
50
,
0
),
//
位置
21
Target
=
new
Balder.Math.Coordinate(
0
,
0
,
0
)
//
目標位置
22
};
23
24
game.Camera
=
ca;
25
OmniLight oml
=
new
OmniLight()
//
燈光
26
{
27
Position
=
new
Balder.Math.Coordinate(
-
100
,
100
,
0
)
28
};
29
Sprite sp1
=
new
Sprite()
//
初始化sprite
30
{
31
AssetName
=
new
Uri(
@"
/BalderSpriteDemo;component/Asset/man.png
"
, UriKind.Relative),
32
Position
=
new
Balder.Math.Coordinate(
-
30
,
0
,
0
)
33
};
34
Sprite sp2
=
new
Sprite()
35
{
36
AssetName
=
new
Uri(
@"
/BalderSpriteDemo;component/Asset/man.png
"
, UriKind.Relative),
37
Position
=
new
Balder.Math.Coordinate(
30
,
0
,
0
)
38
};
39
Sprite sp3
=
new
Sprite()
40
{
41
AssetName
=
new
Uri(
@"
/BalderSpriteDemo;component/Asset/man.png
"
, UriKind.Relative),
42
Position
=
new
Balder.Math.Coordinate(
0
,
0
,
-
30
)
43
};
44
Sprite sp4
=
new
Sprite()
45
{
46
AssetName
=
new
Uri(
@"
/BalderSpriteDemo;component/Asset/man.png
"
, UriKind.Relative),
47
Position
=
new
Balder.Math.Coordinate(
0
,
0
,
30
)
48
};
49
Box box
=
new
Box() {
50
Dimension
=
new
Balder.Math.Coordinate(
20
,
20
,
20
)
51
};
52
game.Children.Add(oml);
53
game.Children.Add(sp1);
54
game.Children.Add(sp2);
55
game.Children.Add(sp3);
56
game.Children.Add(sp4);
57
game.Children.Add(box);
58
LayoutRoot.Children.Add(game);
59
60
}
61
private
double
_sin;
62
void
timer_Tick(
object
sender, EventArgs e)
63
{
64
var x
=
System.Math.Cos(_sin)
*
130d;
//
構造攝像機座標變換的路徑
65
66
var z
=
System.Math.Sin(_sin)
*
130d;
67
var y
=
System.Math.Sin(_sin
*
2
)
*
30d;
68
69
70
ca.Position.X
=
x;
71
ca.Position.Z
=
z;
72
ca.Position.Y
=
y;
73
_sin
+=
0.015d
;
74
75
}
76
}
77
}
78