C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十二)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十二)制作精美的Mini地图②

前面章节中讲解的包括对象头像面板、Mini雷达地图等窗体都是位置固定的,在处理起来方式多样且简单;而RPG、SLG、休闲养成等类型的游戏中往往会大量使用到悬浮且可自由拖动的窗体,比如包裹面板、武器装备面板、个人属性面板、技能面板、系统设置面板等等,这就要求我们必须为游戏量身定做一个通用且易用的ChildWindow控件。那么本节我将为大家讲解如何制作一个包含可拖动头部、关闭按钮及内容主体3大部件高自由度的自定义ChildWindow控件,并用它来实现Mini寻路地图。

首先,我们需要确定该ChildWindow的功能需求,从布局上说包含上述3大部分,且这3部分都是可以用任意对象来实现的,这样才能实现高度拓展;从功能上说,ChildWindow可在游戏窗口中任意拖动,且多个ChildWindow实例之间同样存在一个可协调的层次关系,这方面内容大家可以参考我关于ChildWindow的另一篇文章;从整体结构上说,ChildWindow即可以与游戏中与对象轻松交互,同时也不能影响到游戏中其它对象的活动。

那么接下来进入实质性设计阶段,此时我们有3条路可以选择:

1)通过底层的继承来实现。例如新建一个BaseWindow.cs类文件,然后让之继承Control或ContentControl或UserControl等均可,并通过代码添加并布局好各部分控件,同时实现各部分应有的功能事件,最后让this.Content=总的布局控件或其它方式来完成基类的定义。那么其他的控件就可以通过继承此BaseWindow,在拥有所有BaseWindow功能的基础上再拓展出各自控件自身的特定功能。总的来说这是传统的方案,但是在WPF/Silverlight中易用性不强,因为有着xaml这一层东西在;且目前大多数的开发者都不一定具备底层控件开发的技术与经验,实现起来难度较大。

2)通过Silverlight模板控件来实现。国外很多Silverlight开发者都比较喜欢使用此方式进行控件开发。具体步骤:在项目上右键->添加->新建项->Silverlight模板化控件:


新建好后,大家可以看到的项目结构中出现了一个Themes文件夹,且里面包含着一个名为Generic.xaml的模板文件,主体代码如下:

<Style TargetType="local:QXChildWindow">
 <Setter Property="Template">
  <Setter.Value>
   <ControlTemplate TargetType="local:QXChildWindow">
     ……模板内容……
   </ControlTemplate>
  </Setter.Value>
 </Setter>
</Style>

以后如果还有新的模板添加进项目,那么所有模板的xaml部分均会以如上格式追加到此文件中,只是它们绑定的TargetType不同(cs文件不同)罢了:

时间: 2024-11-01 07:08:35

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十二)的相关文章

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十二)神奇的副本地图 前面几节详细的讲解了游戏地图的完整构造,比较有难度的是关于地图内层如障碍物的实现.A*算法往往能让众多的初学者望而止步,斜度α地图则更需要一定的几何知识及抽象思维.很多朋友就问了:什么年代了,都在说面向对象.提高开发效率,难道就没有大众化可以让各层次能力的朋友们都能轻松制作地图引擎的方法吗?大家是否还记得上一节中遗留的一个小悬念,杀手涧就是它了:神奇的副本地图. 大家先看上图,左边的是地图

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十五)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十五)制作精美的可任意拖放对象的物品栏及装备栏 在通常的网络游戏中,物品.装备.技能.快捷按钮等窗口中的图标都是可以相互拖放的,不同的栏目有着不同的限制,例如技能图标不能拖放到物品栏及装备栏中,且不是所有的魔法技能都可以拖放(如被动技能等):而非装备类的所有物品则无法拖放到角色的装备栏中.那么本节我将向大家讲解如何在本教程示例游戏中添加物品栏及装备栏,并实现它们之间双向物品交换的两种模式:拖放模式和双击模

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十四)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十四)制作主角属性面板及加点器 游戏中会使用大量的菜单面板,而这些面板往往都带有选项卡.如果用Silverlight工具中的TabControl,则需要通过复杂的xaml重写模板来实现自定义样式,这一点时常让开发者头疼,毕竟界面的东西应该属于美工的范畴,这也是我所发现在目前Silverlight中唯一一处只能通过xaml而无法用代码实现的地方.当然,如果您对此特别感兴趣,同样可以到http://www.c

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十三)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十三)制作游戏主菜单面板及鼠标左右键快捷技能栏 每款MMORPG都有一个主菜单,通常置于窗口的底部.游戏中主角大部分的设置操作都从这里开启.如人物属性.物品(包裹).技能.任务.队伍.地图.家族.门派.商城.系统设置等等:当然,还包括快捷自定义菜单栏,以及类似<暗黑破坏神>中经典式的左右键快捷技能栏.这些内容在不同的游戏中往往会根据自身的特性稍做调整,但整体上大同小异.本节,我将同样以<剑侠世界&

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十一)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十一)制作精美的Mini地图① 用什么来承受未来几个月日思夜想的折磨?除了学习还是学习. 感慨了一翻,嘿嘿.本节我将为大家讲解如何为Silverlight游戏制作一个精美的Mini地图.Mini地图又分两种,一种是通常处于游戏窗口右上角的Mini雷达(导航)地图:另一种是全景Mini寻路地图.本节我先向大家讲解如何制作导航Mini雷达地图.此类地图在游戏中主要起到导航作用,即引导主角前行的方向,并且呈现出

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十)斜度α地图的构造及算法 在当前的网络游戏中,地图基本都是采取一定斜度的拼装地图,这其中存在两种斜度地图的构造方式: 第一种我称之为伪斜度地图:该类型地图表现层图片为斜度的,但地图基底障碍物等的构造则实为正方形,如下图: 其实最典型的例子就是上一节所演示的内容了,地图是斜的,但是我们却用垂直的障碍物对其进行基底布局,这就是典型的伪斜度地图了. 这样的地图优点在于可以使用简单直接的地图构造算法(上一节中有详细的

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(四十)

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

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十九)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十九)向Silverlight移植① 一.主要改进: 1)Silverlight3.0上的右键实现: //注册右键事件 HtmlPage.Document.AttachEvent("oncontextmenu", Game_MouseRightButtonDown); //鼠标右键事件 private void Game_MouseRightButtonDown(object sender, H

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十八)

C#开发WPF/Silverlight动画及游戏系列教程(Game Tutorial):(三十八)地图间的传送与切换 终于到了地图处理的最后一节,本节我将为大家讲解如何通过传送点实现主角在地图间的传送以及地图之间的切换.地图转换的关键在于把握好移除与添加:即移除之前地图上除主角之外的所有对象,然后再重新加载新地图上的所有对象.本教程示例游戏中,每张地图的信息都详细的记录于Config.xml配置文件中,包括每张地图的表层.遮挡层.障碍物层等等,然后再附加上本节后面将向大家讲解的传送点信息:这样,