Welcome

首页 / 软件开发 / C# / C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十五)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十五)2010-02-23 博客园 深蓝色右手C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十五)完美捕捉精灵之神器 -- HitTest

怪物们都出现了,如何选中自己心仪的怪是主角目前首要做的事。

为了进行鼠标状态区别,我首先对鼠标变化规则进行约束:当鼠标在屏幕上空旷地图区域移动时,鼠标光标形态表现为默认光标 (0号光标图片),当鼠标经过精灵(悬停于其上方)时则变成发光光标(1号光标图片),如果指向的精灵对象为敌对状态时则鼠标光标变为攻击光标(2号光标图片),当使用魔法快捷键时,鼠标光标变成凝法状态(3号光标图片)。

接下来要做的就是用代码来实现这些规则。要实现鼠标光标的变换,我们首先得将这4个光标加入到系统中,这里我新建一个名为Cursors的文件夹用于保存这4个光标,具体添加方法详见第五节。然后在使用的时候如果该代号光标不存在,则通过数据流将光标添加进系统内存中:

public static Cursor[] GameCursors = new Cursor[4];

/// <summary>

/// 返回指定标号光标

/// </summary>

/// <param name="sign">标号</param>

/// <returns>光标</returns>

public static Cursor getCursor(int sign) {

if (GameCursors[sign] == null) {

GameCursors[sign] = new Cursor(new FileStream(string.Format(@"Cursors{0}.ani", sign), FileMode.Open, FileAccess.Read, FileShare.Read));

}

return GameCursors[sign];

}

一切就绪,现在正式开始实现游戏窗体的鼠标移动事件。既然是鼠标在地图上滑动时产生的效果,因此我们首先添加游戏窗体鼠标移动事件:MouseMove="Window_MouseMove",然后在后台代码中的Window_MouseMove方法里写入相应内容:

private void Window_MouseMove(object sender, MouseEventArgs e) {

this.Cursor = e.Source is QXSpirit ? Super.getCursor(1) : this.Cursor = Super.getCursor(0);

}