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

目录
相关文章
|
11月前
|
存储 运维 虚拟化
虚拟化数据恢复——Hyper-V虚拟化故障导致虚拟机文件丢失的数据恢复案例
在Windows Server上部署的Hyper-V虚拟化环境中,因存储中虚拟机数据文件丢失导致服务瘫痪。北亚企安数据恢复工程师通过物理检测、操作系统及文件系统检测,确定为人为格式化造成,并通过镜像硬盘、重组RAID、分析并恢复文件索引项等步骤,成功恢复数据,最终在新Hyper-V环境中验证并迁移所有虚拟机,确保用户业务恢复正常运行。
|
搜索推荐
恒生电子联合蚂蚁金服、阿里云,发布新一代技术平台
5月16日,恒生电子联合蚂蚁金服、阿里云发布“新一代分布式服务开发平台”。
3450 0
|
Dubbo Java 应用服务中间件
阿里如何用Java?8位专家讲解,871节课程,带你学Java | 开发者社区年终礼包
Java 是常居 TIOBE 榜首的编程语言,社区为广大开发者精心准备了一份 “Java 学习宝典” ,一文教你学懂 Java !还不快来收藏?
89831 0
阿里如何用Java?8位专家讲解,871节课程,带你学Java | 开发者社区年终礼包
|
JavaScript 前端开发
vue3中简单封装input组件和统一表单数据
vue3中简单封装input组件和统一表单数据
596 0
|
Java 测试技术 Spring
Spring boot随机端口你都不会,怎么动态扩容?
一般情况下每个spring boot工程启动都有固定的端口,但是固定端口不利用服务的动态扩容,如果在一台服务器上需要对同一个服务进行多实例部署,很容易出现端口冲突,那么怎么解决这个问题呢?
952 0
Spring boot随机端口你都不会,怎么动态扩容?
|
存储 安全 算法
Dataphin核心功能(四)安全:基于数据权限分类分级和敏感数据保护,保障企业数据安全
《数据安全法》的发布,对企业的数据安全使用和管理提出了更高的要求。Dataphin提供基于数据分级分类和数据脱敏的敏感数据识别和保护能力,助力企业建立合规的数据安全体系,保障企业数据安全。本篇,我们就来聊聊Dataphin的数据安全能力。
|
云安全 安全 语音技术
身份标识和认证技术|学习笔记
快速学习身份标识和认证技术
762 0
|
机器学习/深度学习 人工智能 自然语言处理
人才发展报告揭秘国内 AI 人才发展现状
近日,工业和信息化部人才交流中心发布了《人工智能产业人才发展报告(2019-2020年版)》。AI 人才缺口达 30 万,月薪 35k 却人才难觅,人才发展报告揭秘国内 AI 人才发展现状。
1792 0
人才发展报告揭秘国内 AI 人才发展现状
|
移动开发 小程序 前端开发
公开下载 | 淘票票首次公开小程序开发秘籍,踩过坑才知道怎么走!
在2019年,阿里巴巴文娱的淘票票几乎涉足了当时市面上所有的小程序。在不少平台上,淘票票是阿里“第一批吃螃蟹”的技术团队。回顾过往,阿里文娱做过很多尝试,也踩过很多坑。《小程序 大世界》总结了淘票票过去 2 年在各大主流平台上的小程序实战经验,带你重新认识万亿市场规模的小程序实践!
28579 0
公开下载 | 淘票票首次公开小程序开发秘籍,踩过坑才知道怎么走!
|
机器学习/深度学习 人工智能 资源调度
里工实业:用宜搭自主搭建MES系统,实现生产全流程管理
里工实业是全球智能制造AIoT装备市场的创新者,用宜搭自主搭建MES系统,实现了生产全流程管理。
1510 0
里工实业:用宜搭自主搭建MES系统,实现生产全流程管理

热门文章

最新文章