上一篇只是一个引子,用来说明Projection的基本操作,游戏研发都是用这些小的基本功能慢慢组合出来,其实这一篇仍然是Projection,但是我们将会做一个比较复杂的应用使用silverlight的Projection,玩过街霸4,可能对它的选人界面印象深刻,但是做起来却不容易,因为要请美术设计师将界面设计出来,这样就麻烦了很多,请看街霸4的选人界面:

  请注意小头像,都是按照透视排列组成,这样的形式在一些其他的游戏中经常见到,你可以从容的发给美术,然后请他们做好,再套入,可是这样图片的量就大了很多,一般来说这种方法比较暴力,可是有更好的方法实现,只需要一个小的控件就行了,没错就是使用Projection,我们可以利用它来实现一段代码的生成。

  首先你有一个工程,先建立小的头像,小的头像可以是依据你的布局大小来确定,我这里的布局是600x400的主界面,小头像图标是64x64,所以在参照我的练习中,各位可以以此作为标准。

  上面是一个样图,我们会在后台写一些暴露的属性来控制操作,以及一些鼠标控制的代码,这些代码并不复杂,请注意ImageSouce的BitmapImage所构造的目标用法,你需要从3D_Space改成为你的工程名字。

Code Snippet
  1. public partial class FaceCard : UserControl
  2. {
  3. public FaceCard()
  4. {
  5. InitializeComponent();
  6. Sel_Rectangle.Visibility = System.Windows.Visibility.Collapsed;
  7. }
  8. protected override void OnMouseEnter(MouseEventArgs e)
  9. {
  10. Sel_Rectangle.Visibility = System.Windows.Visibility.Visible;
  11. base.OnMouseEnter(e);
  12. }
  13. protected override void OnMouseLeave(MouseEventArgs e)
  14. {
  15. Sel_Rectangle.Visibility = System.Windows.Visibility.Collapsed;
  16. base.OnMouseLeave(e);
  17. }
  18. private int _faceindex = 1;
  19. public int FaceIndex
  20. {
  21. get { return _faceindex; }
  22. set
  23. {
  24. _faceindex = value;
  25. var uri = new Uri("/3D_Space;component/Res/image" + value + "png", UriKind.Relative);
  26. FaceImage.Source = new System.Windows.Media.Imaging.BitmapImage(uri);
  27. }
  28. }
  29. }

  现在建立一个600x400的角色选择界面(SelectInterface),简单的设计一下LayoutRoot,并在中下的位置上添加一个64x64的Canvas(Grid也可以),在里面添加20个FaceCard控件(就是刚才建立的小头像控件),在Asset里的Project标签中能够找到自定义的控件,如果它不存在就先编译一下工程(Ctrl+Alt+B)。

  好了,为容器命名,然后需要一些代码了,让代码为我们把目标做好:

Code Snippet
  1. public partial class SelectInterface : UserControl
  2. {
  3. public SelectInterface()
  4. {
  5. InitializeComponent();
  6. for (int i = 0; i < 4; i++)
  7. {
  8. for (int j = 0; j < 5; j++)
  9. {
  10. var index = i * 5 + j;
  11. var t = FaceCardGroup.Children[index] as FaceCard;
  12. if (t != null)
  13. {
  14. t.FaceIndex = index + 1;
  15. t.Projection = new PlaneProjection()
  16. {
  17. RotationX = 30,
  18. GlobalOffsetX = j * 70 - 140,
  19. GlobalOffsetY = i * 60 - 300,
  20. };
  21. }
  22. }
  23. }
  24. }
  25. }

  上面的代码的效果是遍历所有FaceCardGroup的元素,将符合条件的添加3D变换处理,这里有一些扩展的做法,比如将中间的两个用其他的控件代替就可以达到空白的效果,以及增加一些鼠标点击事件就能取得目标索引值之类的功能。

  那么运行起来看看效果如呢:

  看起来怎么样,很像街霸4的效果吧,剩下的就需要各位再更加深层次的发挥了,想了解更细致的内容,可以下载工程直接查看。

  源代码下载地址如下:点击直接下载

一起谈.NET技术,Silverlight 游戏开发小技巧:实现街霸4的选人界面相关推荐

  1. 一起谈.NET技术,Silverlight 游戏开发小技巧:动感小菜单

    网页应用受限于自身的浏览器范畴,不能把华丽效果完全展示,正是因为如此,在网页上诞生了无数绚丽的设计,虽然动感程度和桌面应用无法比拟,但是在UI上却下足了功夫,用户体验可以说无以伦比,比如说小小的菜单, ...

  2. Silverlight 游戏开发小技巧:动感小菜单2

    Silverlight 游戏开发小技巧:动感小菜单2 动感小菜单其实是想模仿Apple的菜单按钮设计制作,但是画虎不成反类犬,看起来有点别扭,昨天各位园友提了这方面的建议,感觉太硬如果加入动画可能更好 ...

  3. Silverlight 游戏开发小技巧:轨迹跟随效果

    Silverlight 游戏开发小技巧:轨迹跟随效果 我们通常在游戏中有各种各样的粒子效果,其中有一种就是跟随鼠标发生的轨迹动画,在鼠标经过的地方会产生一些特效,这种方式我们在粒子当中经常使用,本篇使 ...

  4. Silverlight 游戏开发小技巧:实现街霸4的选人界面

    Silverlight 游戏开发小技巧:实现街霸4的选人界面 上一篇只是一个引子,用来说明Projection的基本操作,游戏研发都是用这些小的基本功能慢慢组合出来,其实这一篇仍然是Projectio ...

  5. Silverlight 游戏开发小技巧:扇形排列元素

    Silverlight 游戏开发小技巧:扇形排列元素 斗地主风靡了大江南北,在春晚都做免费性推广,棋牌游戏平台几乎将其作为标配,但是牌类游戏总是一成不变的样子--横向排列,如果扇形排列应该更加符合真实 ...

  6. Silverlight 游戏开发小技巧:角色升级特效

    这次我们将使用Projection完成一些有趣的RPG游戏中常用的特效:升级和传送点特效,我们不需要请特效师制作复杂绚丽的特效,而是只需要他们提供关键的几张图片或者设计样式,如果了您有本领教会他们使用 ...

  7. Silverlight 游戏开发小技巧:星球大战字幕效果

    各位科幻迷可能对星球大战的字幕效果印象深刻,这个电影字幕表现手法曾经风靡大小美国影片,甚至超人影片和电视也曾经用此来做开场和结尾字幕,今天我就将这个效果在blend里面制作技巧告诉大家,下面是星球大战 ...

  8. Silverlight 游戏开发小技巧:昼夜交替动画

    记得在WP7上玩一个游戏有段动画很有趣,是背景在进行昼夜交替,一会儿白天太阳出来白天了,一会儿月亮蹦出来夜晚了,在以前做C++程序的时候曾经实现过类似的效果,今天早上移植了一下到Silverlight ...

  9. Silverlight 游戏开发小技巧:技能冷却效果1(Cooldown)

    到目前为止,大家都非常推崇魔兽的技能冷却效果,就是这样的,我记得群里还对这个效果展开过探讨,其实实现起来并不难,关键是思路是否正确,这部分我得谢谢猪笨无罪,是他先想出的解决方案,他不愿意写博客,也就只 ...

最新文章

  1. FFT与多项式、生成函数题目泛做
  2. CRM系统开发经验谈
  3. Codeforces Round #533 (Div. 2)题解
  4. DatePickerDialog 简单用法
  5. zbar扫描无法近距离扫码_生意好时最怕收银出故障,这几个扫码枪的常见问题你一定要知道...
  6. php pdo 错误信息,PHP的PDO错误与错误处理
  7. 豪!华为放话:3年培养100万AI人才!网友神回应了
  8. 医疗信息化 医学信息 医院管理 资料下载
  9. 域名/网站名/URL
  10. Pausing and Resuming an Activity
  11. 阿里巴巴矢量图标库的使用步骤
  12. 马哥linux 2014,马哥linux内容分享之压缩和解压缩
  13. ICCV 2019 | ICCV 2019 论文接收列表 | ICCV 2019一共接收1077篇 | 共4303篇投稿
  14. 数字乡村大数据可视化平台建设方案 智慧乡村 美丽乡村 智慧农村
  15. turtle画分形树
  16. 昵图网显示内部服务器错误,为什么博客老是显示网页错误?无法正常打开
  17. dataguard 版本必须一致吗?
  18. 选择适合的Silverlight通信技术
  19. SQL删除重复记录保留最大值
  20. 为电脑右键菜单添加记事本打开

热门文章

  1. 清华发布全国城市AI实力榜,你那里排名第几?
  2. 【Part1】用JS写一个Blog(node + vue + mongoDB)
  3. 完整教程--idea使用git进行项目管理
  4. JS通过ajax动态读取xml文件内容
  5. Android中定时器的3种实现方法
  6. SCOM 2012知识分享-15:监视管理组运行状况
  7. HTML5再曝漏洞 安全性遭质疑
  8. 凸包练习: POJ 2187(JAVA)
  9. Exchange server 2010系列教程之四 如何卸载exchange server 2010
  10. CentOS 6升级默认python版本