- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C开发WPFSilverlight动画及游戏系列教程(GameTutorial)(十三)牵引式地图移动模式①,wpf和silverlight,silverlight与wpf,wpf移植到silverlight,wpfmvvmlight,silverlight,silverlight是什么,silverlight安装失败,silverlight下载,无法安装silverlight
在前面诸多的章节里,我就地图构造的实现做了讲解,至此还遗留着一个关键问题:在游戏中是角色在移动还是地图在移动?它们之间的移动(位移)关系是如何实现的?
那么在接下来的章节中我将围绕这两个问题进行详细的分析解说。
首先,还得从游戏模式开始说起。目前2D俯视游戏中以即使战略、SLG、RPG(ARPG)等类型的游戏为主流。在即时战略、SLG大地图中,地图的移动原理是:当鼠标处于游戏窗口的8个边缘时,地图即开始移动,我暂且称之为牵引式地图移动模式。
如上图,我们可以打这样一个比方:将游戏窗口比做我们的摄象机(上图中的Windows13窗口),在地图世界里不断的取景, 我们从摄象机中看的只有摄象机镜头(游戏窗口)中能看到的区域(其他虚的地图部分窗口中是无法显示的)。但是游戏窗口又相当于是用支架固定着不能移动的镜头,那该如何才能看到景色的各个部位呢?那当然只有去移动背景地图图片让我们需要的景色部分呈现在窗口中。因此,根据上图描述的原理,当鼠标进入这8个区域(蓝色和棕色区域)时即触发地图的移动。
为更方便大家的理解,我以窗口中左边那块蓝色区域为例:当我的鼠标在游戏窗口内往左移动快接近边缘时,此时地图图片就开始反向向右进行一定速度或加速度移动;同样的,地图中的所有对象均跟着地图图片以同样的方向与速度进行移动,这样给我们视觉上产生一种感觉:我们在通过鼠标牵引游戏窗口向左方去探寻地图及物体对象。有的朋友就要问了:如果一张地图上有1000个对象,难道我每10毫秒都要去移动这1000个对象吗?这样性能上说是完全不科学的!对,在实际开发中如果一张地图拥有大量物体对象的话,我们肯定不会这样做(如果地图是小地图,或者物体不多, 这样做是完全可行的,并且更容易实现)。在理解了这个原理后,我们看看在WPF/Silverlight中是如何进行这些操作的。首先需要做的就在地图移动的时候,根据地图移动方向时时(在界面刷新线程CompositionTarget或间隔为10毫秒的DispatcherTimer中)通过Foreach高性能的对所有物体对象(Spirit)的X,Y坐标进行修改;而什么时候才需要将这些物体对象显示出来呢?判断当前游戏窗口中心点对应的地图坐标点;并以该点为中点(圆心)进行一个矩形范围或半径为R的圆形范围(下文我简称为地图中心范围)搜索:如果某物体对象的X,Y坐标在此范围内则动态将它的显示实体加载它进入窗体画布(Carrier.Children.Add(Spirit)),然后再将之布局到它对应的X,Y坐标位置上(Canvas.setLeft(Spirit,X);Canvas.setTop(Spirit,Y);),并且继续根据地图的移动而移动(时时修改Canvas.setLeft(),Canvas.setTop());同样的,在地图移动中地图中心坐标是时时改变的,如果某些物体对象的X,Y坐标超出了地图中心范围,那么我们就将之从窗体画布中移除掉(Carrier.Children.Remove(Spirit)),此时这些物体对象相当于重新回到了等候显示的状态,它们的X,Y坐标同样在后台线程中时时更改,只要某个时候当地图中心再度出现在它们的附近时,它们又会重复以上的步骤再显示出来。
大致原理有了,如何通过代码来具体实现呢?
这里我提供两种方法:
第一种方法为通过载体来实现地图移动。具体为首先向游戏窗体中添加8个完全透明的滚动介质(就好比图中那8块区域,其中4个蓝的,4个棕的)分别布局在地图边缘的8个位置上(它们相对于游戏窗体来说永远是不动的),然后在界面线程中时时判断鼠标是否悬停在它们中的某个上从而进行相应的地图移动。
这里我以正下方的滚动介质为例,这样来创建它:
int scrollspeed = 5; //定义滚动速度
Rectangle roller = new Rectangle(); //创建滚动介质
private void InitRoller() {
roller.Width = 800;
roller.Height = 20;
roller.Opacity = 0.3;
roller.Fill = new SolidColorBrush(Colors.Blue);
Carrier.Children.Add(roller);
Canvas.SetZIndex(roller, 10001);
Canvas.SetTop(roller, 490
您可能关注的文档
- (向翠萍)音乐学习对老年人主观幸福感的影响.doc
- (八)非营利组织管理文章书目和网站——精选和评注.doc
- (标线标志交通信号灯)工程施工组织设计.doc
- (非数学专业人士经验)如何提高自身的数学水平.doc
- (第一站病例分析).doc
- AASLD更新丙型肝炎诊治指南.doc
- .案例分析答案.doc
- (完整)绿色生态住宅小区建设要点与技术导则.doc
- ABULS贴吧AULS经验从等级教程矛盾的对立统一百度百度百度.doc
- AHOPO贴吧GOPO经验对等级教程一起伤害案件的定性及民百度百度百度.doc
- 景德镇华意电器总公司校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版新版.docx
- 景德镇华意电器总公司校园招聘模拟试题附带答案详解参考答案.docx
- 景德镇华意电器总公司校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版审定版.docx
- 景德镇华意电器总公司校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版附答案.docx
- 景德镇华意电器总公司校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版完整版.docx
- 景德镇华意电器总公司校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版完美版.docx
- 景德镇华意电器总公司校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版含答案.docx
- 县重点办公室工作报告.pptx
- 景德镇华意电器总公司校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版1套.docx
- 景德镇华意电器总公司校园招聘85人公开引进高层次人才和急需紧缺人才笔试参考题库答案详解版及答案1套.docx
最近下载
- 2024年广东省初中学业水平考试模拟地理试卷(一)课件.pptx VIP
- 广州洪德巷历史文化街区保护利用规划.pdf
- 广州市人民南历史文化街区保护利用规划(文本+图纸).pdf VIP
- 关于烹饪的策划书3.pptx
- WALL·E《机器人总动员(2008)》完整中英文对照剧本.pdf VIP
- LDT 99.13-2008 建设工程劳动定额市政工程-维修养护工程.docx
- 实验报告之spss频数分析.docx VIP
- 新教科版科学小学科学五年级下册全册教案(表格式,可打印).docx
- 2022年新改版教科版五年级上册科学全册教案教学设计(新整理版).doc
- 某小区高楼变频恒压供水系统设计.docx
文档评论(0)