让人感动的地图过程平滑滚动

        玩过rpg朋友应该都知道RPG的游戏地图一般都比較大 今天我和大家分享一下在RPG游戏中怎样来处理超出手机屏幕大小的游戏地图。

如图所看到的为程序效果动绘图
地图滚动的原理        在本人之前博客的文章中介绍过人物在屏幕中的移动方式,由于之前拼的游戏地图是全然填充整个手机屏幕的,所以无需处理地图的平滑滚动。

这篇文章我着重的向大家介绍一下控制人物移动后地图滚动的处理方式。举个样例 如上图所看到的 比方人物向右移动,假设地图贴在屏幕左边边界  将先移动人物在地图的坐标,当人物在屏幕中超过三分之二后 则将地图向人物行走的反方向移动给玩家一种人物还在向右移动的假象。事实上这时候人物仅仅是播放向右行走的动画
在屏幕中的坐标不变 ,当地图向人物行走反方向移动到不能移动的时候 则表示 地图右側边界已经贴住手机屏幕右側边界 这样地图则不能在移动 这时候将移动人物在屏幕上的坐标直到人物贴住屏幕右側边界。其他三个方向原理全然一样。

上一章学习了

p=1039" rel="bookmark">Android研究之游戏开发之进度条载入不明确的能够去看下。

代码的实现方式还是以人物向右移动为例,我们需要三个坐标 一个是m_HeroPos 来保存人物在地图中的X坐标  一个是 mScreenPos 来保存人物在屏幕中的显示坐标 mMapPos 来保存地图在手机屏幕中的显示坐标,按键盘右键后人物在地图中的坐标加上8像素(表示行走的步长),当人物的坐标超过屏幕的三分之二的时候需要检測地图是否已经在边界。 使用地图绘制在屏幕中的X坐标
加上地图的宽度 推断是否等于屏幕的宽度假设等式不成立 则表示地图能够向左放移动 这时候后人物mScreenPos人物显示坐标将不变 mMapPos地图显示坐标将向左移动人物一个步长的位置,假设之前的等式成立 则表示地图无法在向左移动  这时候mScreenPos人物显示坐标将向右移动人物一个步长的位置  直到屏幕右側边界 mMapPos地图显示坐标不会改变。其三个方向的移动算法全然一样。

如图所看到的地图在平滑的滚动
拓展学习之卡马特地图缓冲算法这个游戏demo 还不能称之为完美 在与物理层碰撞中还是存在一点问题 只是 最重要的是 没有使用卡马克地图缓冲算法,以下我具体介绍一个卡马克地图缓冲算法原理。我们须要一张地图换冲图, 为了实现平滑滚动的效果缓冲图的大小应该是手机屏幕宽高 。这样内存中就会常驻 一张 手机屏幕大小的缓冲图。 假设人物向下方行走则表示地图向上移动。这时候屏幕
将被分割出来了2部分, 上半部分为缓冲图向上移动后的缓冲内容,下半部分则就是我们需要更新地图的部分,将更新后的下半部分与地图缓冲的上半部分结合起来绘制在屏幕中则完毕了一次地图更新,这样能够大大提升游戏绘制地图的效率。假设不使用这样的方式来更新地图 则地图每移动一次 都需要双for循环又一次一个tile一个tile的绘制一遍效率会非常低下。如图所看到的  地图向上移动后更新绿色的地图部分 与 将上次缓冲的红色部分结合起来就是新的游戏地图,其他方向原理全然一样。

" class="size-full wp-image-1048 aligncenter" alt="Android研究之游戏开发主角与地图的滚动(七) - 第4张 | 成功智慧网-专注游戏编程开发!

" src="http://www.cgzhw.com/wp-content/uploads/2014/07/219.jpg" style="">

       如图所看到的:假设游戏中能够按右下方式来移动主角 那么以屏幕右下角为圆心 地图就会被分割成4个部分下图中红色区域需要更新当中 3 个部分 地图左边超出的部分 地图以下超出的部分 地图左下方超出的部分。更新的原理和上面一样。
       这么看来卡马克不愧是个游戏领域的天才,马克地图缓冲算法不愧是最最棒的地图算法之中的一个。大家如有有兴趣能够去查一查关于卡马特的资料,他确实是一个顶尖的游戏开发project师。

欢迎大家下载阅读。还是那句老话每篇文章都会附带源码的下载地址。

最后假设你还是认为我写的不够具体 看的不够爽 不要紧我把源码的下载地址贴出来 欢迎大家一起讨论学习雨希望能够和大家一起进步。

源代码下载:heromove

版权声明:本文博客原创文章,博客,未经同意,不得转载。

Android游戏开发研究与主角在地图滚动的更多相关文章

  1. Android游戏开发研究帧动画实现

     1.动画的原则框架        帧的动画帧的动画顾名思义,画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在同样区域高速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,事实上只 ...

  2. Android游戏开发基本知识

    Android游戏开发 手机游戏被业内人士称为继短信之后的又一座金矿.Android虽然基于Java,但是其虚拟机是基于寄存器的,速度得到了很大的提升,这为Android平台上开发游戏提供了坚强的后盾 ...

  3. Android游戏开发实践(1)之NDK与JNI开发03

    Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...

  4. Android游戏开发实践(1)之NDK与JNI开发01

    Android游戏开发实践(1)之NDK与JNI开发01 NDK是Native Developement Kit的缩写,顾名思义,NDK是Google提供的一套原生Java代码与本地C/C++代码&q ...

  5. Android游戏开发实践(1)之NDK与JNI开发02

    Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...

  6. Android游戏开发实践(1)之NDK与JNI开发04

    Android游戏开发实践(1)之NDK与JNI开发04 有了前面几篇NDK与JNI开发相关基础做铺垫,再来通过代码说明下这方面具体的操作以及一些重要的细节.那么,就继续NDK与JNI的学习总结. 作 ...

  7. [Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)

    初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...

  8. Android游戏开发之旅 View类详解

    Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...

  9. 《Android游戏开发详解》一1.7 控制流程第1部分——if和else语句

    本节书摘来异步社区<Android游戏开发详解>一书中的第1章,第1.7节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.7 ...

随机推荐

  1. java通讯录

    )设一个通信录由以下几项数据信息构成: 数据项               类型 姓名                  字符串 地址                  字符串 邮政编码        ...

  2. 如何js编译的文件dll对于网页电话

    1. 加入一个项目的解决方案:JSControl 2. 在这个项目中加入js文件(JScript1.js) 脚本的内容: function showAlert(){ alert('Today is a ...

  3. php调用webservice的几种方法

    原文:php调用webservice的几种方法 1.WSDL模式: $soap = new SoapClient("http://192.168.6.69:8899/Service1.asm ...

  4. XML数据读取方式性能比较(一)

    原文:XML数据读取方式性能比较(一) 几个月来,疑被SOA,一直在和XML操作打交道,SQL差不多又忘光了.现在已经知道,至少有四种常用人XML数据操作方式(好像Java差不多),不过还没有实际比较 ...

  5. spring集成quartz

    spring集成quartz 注意:出现异常"Caused by: java.lang.IncompatibleClassChangeError: class org.springframe ...

  6. Binary System

    Description Usually we use number in the decimal system, for it is so convenient for us to remember ...

  7. 一天JavaScript示例-点击图片显示大图片添加鼠标

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  8. 第十二章——SQLServer统计信息(4)——在过滤索引上的统计信息

    原文:第十二章--SQLServer统计信息(4)--在过滤索引上的统计信息 前言: 从2008开始,引入了一个增强非聚集索引的新功能--过滤索引(filter index),可以使用带有where条 ...

  9. 【转】[Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式

    android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存  下面看他们的理解. [size=1.8em]Handler+Runn ...

  10. MailTest

    GridBagLayout把一个界面分为m行n列的网格 GridBagConstraints的一个实例:gridx = 2; // X2,表示组件位于第2列gridy = 0; // Y0,表示组件位 ...