C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十)2010-02-23 博客园 深蓝色右手C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十)向Silverlight移植②三、新增功能:1)新增游戏的音乐及音效对象:
public static MediaElement gameMusic, gameAudio;
2)新增游戏鼠标光标:
//设置游戏鼠标光标
GameCursor.Stretch = Stretch.Fill;
GameCursor.Source = Super.GetImage("/Image/Cursor/0.png");
在鼠标移动事件中根据命中测试进行时时的鼠标光标图片位置更新:
//鼠标移动(悬停)事件
private void Game_MouseMove(object sender, MouseEventArgs e) {
……
Point p = e.GetPosition(Root);
GameCursor.SetValue(Canvas.LeftProperty, p.X); GameCursor.SetValue(Canvas.TopProperty, p.Y);
……
}
此方法实现了鼠标图片跟随光标移动,但是很明显的影响了程序整体性能(CPU消耗会明显增加),如果哪位朋友能提供更好的解决方案,望留言给我。3)新增点击水滴:当鼠标在屏幕上左键点击时,只要不点到对象物体上,则在该位置显示出光标水滴,并播放它自身的动画。目前我的Silverlight游戏引擎中只用一个光标水滴:
QXDecoration hitCursor;
/// <summary>
/// 加载光标点击水滴
/// </summary>
private void LoadHitCursor() {
hitCursor = new QXDecoration() {
Code = 1,
EndFrame = 9,
CenterX = 32,
CenterY = 32,
};
hitCursor.Visibility = Visibility.Collapsed;
Add(hitCursor);
}
//鼠标左键事件
private void Game_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
……
//出现光标水滴
hitCursor.Visibility = Visibility.Visible;
hitCursor.FrameCounter = 0;
hitCursor.Timer.Start();
hitCursor.Coordinate = p;
……
}