日期:2014-05-18 浏览次数:21336 次
欢迎大家提出意见,一起讨论!
转载请标明是引用于 http://blog.csdn.net/chenyujing1234
需要源码请与我联系。
编译平台:VS2008 + .Net Framework 3.5
语言: C#
使用工具:Expression Design 4
Expression Blend (它们的获得请参考我的另一文章 http://write.blog.csdn.net/postedit/7659256)
尽管程序员可以使用VS编写XAML代码的方式来构造用户界面,但是对于有设计爱好的用户来说,使用类似Photoshop一样的Expression套件能将
软件美工最大化。对于怪物与目标块的图形显示,示例使用了Expression Design来设计图形,然后将其导入到Expression Blend中进行布局处理。
Expression Design 是一个专业的图表和图形设计工具。该工具提供了矢量图形的绘制能力,强大之处可以像PhotoShop一样设计好用户界面或是所需要量的图形,
使用其导出功能导出为XAML资源或代码。Expression Design主界面如下:
Design 通常是与Blend紧密相关的。美工人员使用Design强大的设计功能来设计界面元素,导出给Blend进行编辑。最后通过VS设计程序代码。
在示例中,使用Design设计了一个Cell图案,在其中添加了多个图层,每一层放置各自不同的图案,比如箱子、怪物、墙体。
然后使用Design的导出功能将这些图案导出为资源字典,以便于程序引用这些图形。导出窗口如下:
然后在App.xaml中的资源字典的定义中使用<ResourceDictionary.MergedDictionaries>指定Cell.xaml作为整个应用程序级别的资源。
在开始布局游戏区域前,主界面上需要一个Banner来显示游戏名称,为游戏主界面添加背景图片以增加界面的效果。
游戏创建了两个用户控件来实现这样的特效,位于游戏项目的Controls文件夹下。
BackgroundControl.xaml用户控件实现非常简单,通过使用Expression Design来设计背景图片,然后导出为独立的Xaml文件。
导出设置如下:
图形将被置于一个Canvas画布中,在MainWindow.xaml中通过引用这个控件来设置背景色。
Banner.xmal的实现与BackgroundControl.xaml的实现类似。
主界面的布局非常简单,主要分为四行:
(1) 第一行
主要放了一个Border、一个Rectangle、一个Viewbox(里面放Banner)
(2) 第二行
在一个Grid中加入一个Rectangle、显示关卡代码、关数、按钮
(3) 第三行
只是一个间隔,没放东西
(4) 第四行
如上,位于Viewbox的Grid, x:Name为grid_Game在游戏启动时动态创建行和列定义,并在行列中放置多个Button按钮来实现游戏的方块。
在MainWindow.xaml的声明中,为窗口关联了Loaded事件,当该事件触发时,将执行Window_Load代码。这段代码在游戏窗口打开时,开始游戏第一关。
Window_Loaded将调用在资源中实例化的Game类,在Window.Resource资源区,首先定义了Game类,代码如下:
<!-- 用于整个游戏的Game实例. --> <Sokoban:Game x:Key="sokobanGame"/>
在MainWindow.xaml.cs中相应地定义了一个Game属性,该属性使用在资源中指定的x:Key键值查找Game对象实例。Game属性的声明如下:
/// <summary> /// 获取定义在Window资源中的Game对象的实例 /// </summary> /// <value>游戏实例.</value> Game Game { get { return (Game)TryFindResource("sokobanGame"); } }
Game属性的get获取器使用TryFindResource() 方法,传入指定的查找对象实例,并转换为Game对象。因为TryFindResource()方法返回object类型的实例。
// // 摘要: // 搜索具有指定键的资源,如果找到,则返回该资源。 // // 参数: // resourceKey: // 要查找的资源的键标识符。 // // 返回结果: // 找到的资源;如果未找