zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

开发 -- 怎么 之旅 13 大师 win8 致敬
2023-09-14 08:57:16 时间

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

人物介绍: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:这些什么头大的,我们先看看微软的解释:


为容器的子动画提供对象和属性目标信息的容器时间线。你可能常用到的是他的子类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


程序员吐槽自己阿里p7面试微软被拒,网友:你就是高级一点的码农 我想一提起阿里巴巴,我们就互相到马云这位大佬。然而阿里巴巴也是我国巨头企业霸主之一,在国际上也十分具有知名度。众所周知阿里员工的待遇和福利是非常优渥的,因此也吸引了很多年轻人的目光。但是阿里和国际知名企业如谷歌、微软等相较于技术来说还是有着一定的差距。