win8 开发之旅(13) --webabcd大师,这事你怎么看? 向webabcd大师致敬。

首先,注明:以下的对话,纯属虚构。如有雷同,纯属巧合。

人物介绍:Webabcd大师——江湖人称姓王名磊,微软的mvp(最有价值专家),。net界一等一的高手。小曾——silverlight小白。

时间地点:2012年9月的一天,在一次北京举行的.net爱好者的聚会上。webabcd大师,做了一个关于的silverlight的演讲的以后,与会人员自由交流之时。

首先,大师之所以是大师,不仅仅是因为是在技术水平的登峰造极。而且是因为其做人生修为上的高山仰止。所以,这位大师不知疲倦的解开了小曾这个silverlight小白关于一个win8上打地鼠这个小游戏的16个疑惑。

 小曾:⑴webabcd大师,我要做这个打地鼠的这个游戏,可是没有老鼠的头像,你怎么看?

 webabcd:首先,你如果想不用图片的话,可以用silverlight原生态的语言来画图,silverlight本来就能有画图的功能。象著名的玩具总动员的人物,动画都有一个silverlight版本。当然,一般的初学者用图片等素材替代就可以了。

  小曾:⑵webabcd大师,我看电脑版和其他的移动设备(android,ios)上游戏的都有音效的效果,如果我想这个游戏,有音效的效果,难道用silverlight来编音效的代码。你怎么看?

webacbd:首先:通过源代码来实现音效是非常愚蠢做法。当然,silverlight中播放音效,有它自己的解决法案。通过mediaElement和MediaLength控件来播放。我们参看msdn: 

表示包含音频和/或视频的控件。

  小曾:⑶哦,原来这样啊!我如果要写这个小游戏是不是要写一个老鼠类,可是老鼠这个类最终要显示到页面上去。这么做很烦。webabcd大师,你怎么看?

  webabcd:首先,对你有这种思想,我要批评你,编程不要有怕麻烦的思想。这是必须要做的,当然,你不想这么做,你可以这个老鼠类用一个用户控件来表示了,这样你不用写两个类了。但是,微软这种做法,有它的弊端,就是使人面向对象的思维能力降低了。但是,请您记住,你如果想从一个小菜变成一个大牛的话,最好是用面向对象的来思考,最好是用mvvm的架构来写这个项目。如果你要快速开发的就用做用户控件的方法就可以了。

 小曾:(4)咦,我知道mvc,MVp的设计模式。mvvm。。。,你怎么看?

 webabcd:你知道这些,我还是比较的欣慰。。因为说明你可能有点面向对象的基础,至于你问道的什么是MVVm,他是mvp的一个进化,过去mvc用图是这么表示的:

而MVVM的用图形是这么表示的:

他们的本质都是实现表示层和逻辑代码的解耦,你看这两个图,mvvm中的viewmodel 能够接受来自service的结果,这对于mvc来说更加的灵活。

小曾:⑸我这个打地鼠的游戏怎么用mvvm来架构。

webabcd:大概思路是这样的,你可以抽取两个简单model对象,一个mouse对象,一个HitModel对象,这对应的hitmodel对象接受的service是打击这个方法。 绑定,就绑定这个方法。

小曾:⑹架构我是有了,我们在讨论点xaml的语言的实质点的东西。如果是这个小游戏,一定要做老鼠进洞出洞的动画,你怎么看?

webabcd:这个好办,xaml中提供了一个storyboard的类的就是专门做动画的。

小曾:⑺我一看着storyboard哪些参数就头大,webabcd大师,你怎么看?

webabcd:这些什么头大的,我们先看看微软的解释:

Storyboard 类

为容器的子动画提供对象和属性目标信息的容器时间线。你可能常用到的是他的子类DoubleAnimationUsingKeyFrames,EasingDoubleKeyFrame类,你看看下面的源代码吧

<Storyboard x:Name="sbOutHole">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="mouse" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">
<EasingDoubleKeyFrame KeyTime="00:00:00" Value="41">
<EasingDoubleKeyFrame.EasingFunction>
<BackEase EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
<EasingDoubleKeyFrame KeyTime="00:00:00.4000000" Value="-93">
<EasingDoubleKeyFrame.EasingFunction>
<BackEase EasingMode="EaseInOut"/>
</EasingDoubleKeyFrame.EasingFunction>
</EasingDoubleKeyFrame>
</DoubleAnimationUsingKeyFrames>
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="mouse" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
<EasingDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
<EasingDoubleKeyFrame KeyTime="00:00:00.4000000" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>

这段源代码一个老鼠进洞的动画,首先动画的作用于的目标的控件是mouse的这个控件,他改变的值是子控件的y轴的值,动画持续的时间是0.4秒,作用的值是40,他动画的效果是进行动画处理之前略微收回动画的动作。你是不是有一点基本的明白了。

小曾:⑽好,我视乎有点懂了。那我做这个游戏,时候有时会出现这个错误:

错误 1 无法将“Mouse”添加到集合属性“Children”中, 类型必须为“UIElement” C:\Users\admin\Documents\Visual Studio 2012\Projects\ZCWMoleAttack\MoleAttack\Hole.xaml 49 10 MoleAttack ,

webabcd:呃呃呃!这个问题 把ctrl-namespace:变成using 前者是老写法,win8只支持后者。

小曾:⑾我还有个问题要问,win8不支持mouseLeftButtonDown,你怎么看

webabcd:你可以用Tapped事件来替代。

小曾:⑿如果要要用MouseMove事件,你怎么看?

webabcd:你可以用PointerMove事件替代

小曾:⒀在就是,有关算法的问题,如何来进行碰撞检测了,你怎么看?

webabcd:silverlight有个rectangle控件中有个insectwith这个方法,能够判断两个控件是否碰撞。

小曾:⒁对于不同的老鼠随机钻出洞方法,你怎么看?

webabcd:可以用random函数解决了,当然你想要更加的随机的话,new Random(datetime.Now.Millseconds);这样子 产生的随机数更加的随机

小曾:⒂树洞这样的类,你怎么看?

webabcd:树洞这样的类,是非重要的类,可以用用户控件解决,做把做Mouse,hitModel这样的的类添加到这个控件上,交由一个GameMain的用户控件处理相应的逻辑。

小曾:⒃老鼠被打后,得分,你怎么看?

webabcd:这个可以通过一个score事件来实现老鼠被打后,得分的效果。

小曾:谢谢,webabcd大师答疑解惑。

webabcd:不用谢,非常乐意 与他人分享知识吗。

想看看一下他内部的结构吗,请猛击:http://51aspx.com/Code/Win8GophersGame

时间: 2024-09-20 00:22:20

win8 开发之旅(13) --webabcd大师,这事你怎么看? 向webabcd大师致敬。的相关文章

win8 开发之旅(1) --连连看游戏开发 前奏

   两天没写博客了,手痒痒了,你问我干吗去了,学习win8开发去了,    发现metro UI 风格就是  给人耳目一新的感觉,而微软的技术真的是介入牛a与牛b之间.如果您有xam与.net开发基础,很快能够上手吧!    我想微软既然让开发人员学习成本如此之低,那我岂不是能很快完成我的第一个小的项目--连连看(因为,以前在wp7上做过类似的应用).    可任何事情都是--说时容易做时难.一个小东西竟然花去了我两天的宝贵的休息时间.虽然可惜,但确实说收获颇丰.    首先, 我们要开始老生

win8 开发之旅(3) --五子棋游戏开发 前奏

     真的是好久.好久没有写博客了,手都生了.我有在国庆这七天的时间更进一步的学习了xaml语言,熟悉了win8的开发的过程.      因此我会把我这些天开发的一些心得陆陆续续的分享给大家.       经过前几次我写相应的开发的历程,我就发现写自己开发的历程,要么直说自己的想法,要么只贴源代码,使读者摸不着头脑.在这里,  我争取综合两者长处,深入浅出的剖析开发历程,争取使大家有所获益.       在这节中,我们要主要搞清楚以下几个问题.       什么是五子棋       编程实现

win8 开发之旅(14) --飞机游戏制作揭秘

先看看这个游戏的类结构的介绍 类结构  公共类层: 子弹帮助类. BulletHepler,公共帮助类. CommonHelper,图片帮助类.ImageHelper,精灵工厂类.SpriteFactory. 游戏元素层:  公有元素有精灵类.Sprite,精灵实体类.ModelSprite,英雄实体类.HeroSprite,游戏结束类.GameOver; 旗下又包括了Bullet层,Daoju层,Effect层,Enemy层. Bullet层有一个基类BulletSprite,子弹精灵类.其他

win8 开发之旅(17) --足球游戏揭秘3

我们继续我们的足球的揭秘之旅了,在解密的过程中,我牢牢遵守了由易到难的原则,今天是解密FoulTypes,GameState,PlayerState这三个枚举类型. FoulType--犯规的枚举类型,相应的源代码如下所示: 1 /// <summary> 2 /// 犯规的类型的枚举类型 3 /// </summary> 4 public enum FoulTypes 5 { 6 /// <summary> 7 /// 直接任意球 8 /// </summary

win8 开发之旅(4) --五子棋游戏开发 面向对象的分析

  上节说到剖析五子棋的任务从这节开始,那确实.      其实,这节的任务很简单,就是 以完全面向对象的思想来分析这个小游戏.        对于面向对象,对于开发人员,一定不再陌生,这里就不再赘述.       那他需要哪些类了.          一个黑棋子,一个白棋子,他是不是有许多的属性 是一样的,因此我们这里抽象出一个piece 包含位置,类型等等属性         这些棋子在哪玩,是不是棋盘上.因此,我们需要棋盘类(pieceboard)类来体现所谓的棋盘.         怎么

win8 开发之旅(18) --足球游戏揭秘4

这节,我们介绍一下DiscoidPosition,TableBorder,Vector2D  这三个类吧.你别开只有这三个类,对这个项目有着至关重要的作用. ①DiscoidPosition--物体的位置的坐标,标记物体的x,y坐标的位置.源代码如下所示: 1 ///<summary> 2 /// 物体的位置 3 /// </summary> 4 public class DiscoidPosition 5 { 6 /// <summary> 7 /// x坐标 8 /

win8 开发之旅(10) --五子棋游戏开发 错误提醒和纠错

      经过一系列的铺垫和折腾,我的五子棋的开发也该走到了尽头.在这开发的几天中,我有一些错误,也有一些感悟,因此需在这里做一个总结.              这个项目中,遇到了一个错误,相信也是大家也会碰到的.我想用RadialGradientBrush(渐变笔刷)使黑白棋子做的更有质地,可惜没有这个类.    微软貌似是为了提高显卡性能,把这个类干掉了.而且Metro界面程序好多笔刷都不支持.我思考了再三,没辙.换一下其它解决方案吧.例如:         1.在photoshop中渲

win8 开发之旅(19) --足球游戏揭秘5

今天,我们揭秘一下Group,GameConfig,PlayersConfig这几个类. 这几个虽然是添头类,但缺少了他,游戏,嗨,真的运行不了.那,请掀起盖头来吧! ①Group--有足球知识的基础的人,都明白这是干嘛的,这是一个分组情况的类.这是中国球迷最避讳一个词,每次大赛小赛一出来,总是看到国足被分入了死亡之组,哎怎么总被分入死亡之组了,这个类在游戏中的作用如图所示: 相应源代码如下所示: /// <summary> /// 当前的组别 A组 B组 C组 /// </summar

win8 开发之旅(8) --五子棋游戏开发 诠释View层

 View层,虽是短短的几个字,却有着丰富的内涵.如若做不好的话,却可能整个项目的最大败笔.     那view究竟是个啥玩意. 百度百科上说View是视图是用户看到并与之交互的界面. 就好像生活人的一张脸,长得好的人,给人的第一印象自然不错吧!人毕竟是视觉动物.  生活中,喜爱美女.帅哥也是这个道理吧!以此类推,在it界大兴UI(用户体验)的时代,一个好的用户体验的自然会为你博得网民的眼球,好的用户体验自然为会为你带来  巨大的客户. 当然UI,不简单是界面漂不漂亮,而更重要是功能强不强大,用