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

        玩过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. hdu 5074 相邻的和最大dp

    http://acm.hdu.edu.cn/showproblem.php?pid=5074 给定一个序列 有些位数未知,给你全部两个数连续所得到的能量.问你怎么安排数字使得总能量最大 二维dp,dp ...

  2. Socket规划中的局域网内测试

    前面提到的Socket信息及文件传输软件,如何测试和使用它? 事实上仅仅要推断client及server的局域网连通就可以. 1.Server在cmd下输入 ipconfig/all获得IP地址或者本 ...

  3. JDBC公共动作类

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sq ...

  4. 【Android小应用】强迫症头像生成器

    近期一段时间在微信朋友圈,在头像的右上角添加一个红底白字的数字,让非常多有强迫症的同学点个不停,深深佩服发明这样的头像的姑娘,太机智了.但它不能自己定义,这是硬伤.... 这是朋友圈里的效果图: 这个 ...

  5. datatable1.9 与datatable1.10以数据差异

    我还探讨datatable1.10新用途,如果在下面的代码中的错误,欢迎.. 1.10与1.9解释官方网站之间的差异:http://www.datatables.net/upgrade/1.10 看代 ...

  6. 如何实现Web聊天

    假设你web聊天不知道这件事情,那么最好的方法可能是:openfire+jsjac openfire它是java做开源xmppserver,jsjac它是javascript做开源的Web版本xmpp ...

  7. SQL入门学习4-复杂查询

    5-1 视图 视图和表 视图和表的区别只有一个是否保存了实际的数据 使用INSERT和SELECT实际上就是从存储设备中读取数据,各种计算后,将数据呈现给用户. 视图不会将数据保存在存储设备中.实际上 ...

  8. boostrap-非常好用但是容易让人忽略的地方------row

    row是非常好用但是却非常容易忽略的地方. 想实现内部元素相对父级的padding=0,则在父子中间加个row.如下图 列嵌套也是同样的道理 经验之谈:学会row的用法,在手机版布局的时候会很方便,否 ...

  9. html不常见问题汇总

    写html已经好长一段时间了,也遇到了不少问题,跟大家分享下 form是不可以嵌套的 说明:如果嵌套会有很多问题 但是可以并列 <html> <head> </head& ...

  10. 使用php+swoole对client数据实时更新(二) (转)

    上一篇提到了swoole的基本使用,现在通过几行基本的语句来实现比较复杂的逻辑操作: 先说一下业务场景.我们目前的大多数应用都是以服务端+接口+客户端的方式去协调工作的,这样的好处在于不论是处在何种终 ...