ǰλã >> Android >> Android研究之游戏开发主角与地图的滚
  ϸ

Android研究之游戏开发主角与地图的滚

ȶȣ285   ʱ䣺2016-04-28 04:28:40.0
Android研究之游戏开发主角与地图的滚?

人物移动地图的平滑滚动??/strong>

        玩过rpg游戏的朋友应该都知道RPG的游戏地图一?比较?今天我和大?分享?下在RPG游戏??何来处理超出手机屏幕大小的游戏地图??/strong>

如图?示为程序效果动画?/strong>
?/span>Android研究之游戏开发主角与地图的滚?七) - ?? | 成功智慧?专注游戏编程?发!
地图滚动的原理      ?在本人之前博客的文章?绍过人物在屏幕中的移动方式,因为之前拼的游戏地图?全填充整?机屏幕的,所以无?处理地图的平滑滚动?这篇文章我?重的向大家介绍一下控制人物移动后地图滚动的?理方式?举??如上图所?比?人物向右移动,?果地图贴在屏幕左边边界?将先移动人物在地图的坐标,当人物在屏幕中超过三分之二?则将地图向人物?走的反方向移动给玩??种人物还在向右移动的假象,其实这时?人物只?放向右?走的动画 在屏幕中的坐标不?,当地图向人物?走反方向移动到不能移动的时??则表?地图右侧边界已经贴住手机屏幕右侧边界 这样地图则不能在移动 这时候将移动人物在屏幕上的坐标直到人物贴住屏幕右侧边界,其它三个方向原理完全?样?上?章?习了Android研究之游戏开发之进度条加?/span>不明白的?去看下??/strong>
Android研究之游戏开发主角与地图的滚?七) - ?? | 成功智慧?专注游戏编程?发!
 
代码的实现方?/strong>还是以人物向右移动为例,我们须?三个坐标 ??m_HeroPos 来保存人物在地图?X坐标  ?? mScreenPos 来保存人物在屏幕?显示坐标 mMapPos 来保存地图在手机屏幕?显示坐标,按?右键后人物在地图?坐标加上8像素(表示?走的步长),当人物的坐标超过屏幕的三分之二的时?需要?测地图是否已经在边界?使用地图绘制在屏幕中的X坐标 加上地图的??判断?等于屏幕的?度?果等式不成立 则表示地图可以向左放移动 这时候后人物mScreenPos人物显示坐标将不?mMapPos地图显示坐标将向左移动人物一??长的位置,?果之前的等式成立 则表示地图无法在向左移动  这时候mScreenPos人物显示坐标将向右移动人物一??长的位置  直到屏幕右侧边界 mMapPos地图显示坐标不会改变。其三个方向的移动算法完全一样??/div>
如图?示地图在平滑的滚?/strong>
Android研究之游戏开发主角与地图的滚?七) - ?? | 成功智慧?专注游戏编程?发!
 
拓展学习之卡?地图缓冲算法这个游戏demo 还不能称之为完美 在与物理层?撞中还是存在?点问?不过 ?重?的是 没有使用卡马克地图缓冲算法,下面我?细介绍一??地图缓冲算法原理。我?要一张地图换冲图?为了实现平滑滚动的效果缓冲图的大小应该是手机屏幕宽高 ,这样内存中就会常驻 ??手机屏幕大小的缓冲图?如果人物向下方?走则表示地图向上移动,这时?屏?将?切割出来?部分?上半部分为缓冲图向上移动后的缓冲内?,下半部分则就是我们?要更新地图的部分,将更新后的下半部分与地图缓冲的上半部分结合起来绘制在屏幕中则完成了?次地图更新,这样?大大提升游戏绘制地图的效率??果不使用这?方式来更新地?则地图每移动??都须要双for?重新?个tile?个tile的绘制一遍效率会很低下??图所示?地图向上移动后更新绿色的地图部分 ?将上次缓冲的红色部分结合起来就是新的游戏地图,其它方向原理完全一样??

 

Android研究之游戏开发主角与地图的滚?七) - ?? | 成功智慧?专注游戏编程?发!

 
       如图?示:如果游戏?以按右下方式来移动主?那么以屏幕右下?为圆?地图就会?割成4?分下图中红色区域须?更新其中 3 ??地图左边超出的部?地图下面超出的部?地图左下方超出的部分,更新的原理和上?样??/strong>
Android研究之游戏开发主角与地图的滚?七) - ?? | 成功智慧?专注游戏编程?发!
 
       这么看来卡马克不愧是?戏?域的天才,马克地图缓冲算法不愧是??优?的地图算法之?,大家?有有兴趣?去查?查关于卡?的资料,他确实是??尖的游戏?发工程师。?迎大家下载阅读,还是那句老话每篇文章都会附带源代码的下载地址?/strong>?后?果你还是觉得我写的不够??看的不??不?紧我把源代码的下载地?贴出?欢迎大??起?论?习雨希望?和大家一起进步??

 

源码下载?a href="http://www.cgzhw.com/?p=1044" target="_blank">heromove