#Testin杯#Mkey libgdx游戏引擎教程实战篇(四)移植俄罗斯方块(附源码)

54
回复
242075
查看
[复制链接]

30

主题

350

帖子

1089

安币

Android大神

Rank: 6Rank: 6

QQ达人

发表于 2012-7-10 22:11:57 | 显示全部楼层 |阅读模式
本帖最后由 耒佲請ぁ留埗 于 2012-8-3 11:28 编辑

   本文参与:Testin—安卓巴士Android开发原创教程大赛

以下系列教程按讲课顺序排列,也是推荐阅读的顺序

第一讲:libgdx游戏引擎教程(一)性能优良的游戏引擎—libgdx http://www.apkbus.com/android-57355-1-1.html

第二讲: libgdx游戏引擎教程(二) ApplicationListener,着手第一个程序http://www.apkbus.com/android-57372-1-1.html

第三讲:libgdx游戏引擎教程()libgdx粒子系统的使用 http://www.apkbus.com/android-57456-1-1.html

外篇一:libgdx游戏引擎教程外篇(一)优美的自定义进度条(附源码) http://www.apkbus.com/android-57523-1-1.html

第四讲:libgdx游戏引擎教程(四) 游戏正式开始,资源异步加载(附源码)http://www.apkbus.com/android-57716-1-1.html

第五讲 libgdx游戏引擎教程(五)多游戏界面的实现(一)附源码 http://www.apkbus.com/android-57936-1-1.html

第六讲 libgdx游戏引擎教程(六)多游戏界面的实现(二)附源码 http://www.apkbus.com/android-57991-1-1.html  

第七讲 libgdx游戏引擎教程(七) 在libgdx中拦截Android按键事件 http://www.apkbus.com/android-58030-1-1.html  

外篇二: libgdx游戏引擎教程外篇(二)libgdx移植俄罗斯方块(附源码) http://www.apkbus.com/android-58102-1-1.html   

实战一:libgdx游戏引擎教程实战篇(一)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58404-1-1.html  

实战二:libgdx游戏引擎教程实战篇(二)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58408-1-1.html  

实战三:libgdx游戏引擎教程实战篇(三)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58414-1-1.html  

实战四:libgdx游戏引擎教程实战篇(四)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58418-1-1.html  

实战五:libgdx游戏引擎教程实战篇(五)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58419-1-1.html

实战六:libgdx游戏引擎教程实战篇(六)移植俄罗斯方块(附源码) http://www.apkbus.com/android-58760-1-1.html

第八讲 libgdx游戏引擎教程(八) libgdx中的用户手势识别(一)附源码 http://www.apkbus.com/android-58933-1-1.html

第九讲 libgdx游戏引擎教程(九) libgdx中的用户手势识别(二)附源码 http://www.apkbus.com/android-59152-1-1.html

外篇三: libgdx游戏引擎教程外篇(三) 优美的自定义对话框(附源码) http://www.apkbus.com/android-59654-1-1.html  

第十讲:  libgdx游戏引擎教程(十)演员类的复杂动画(一)(附源码) http://www.apkbus.com/android-59998-1-2.html

第十一讲:libgdx游戏引擎教程(十一)演员类的复杂动画(二)(附源码) http://www.apkbus.com/android-60053-1-1.html

第十二讲:libgdx游戏引擎教程(十二)演员类的复杂动画(三)(附源码) http://www.apkbus.com/android-60194-1-1.html   

第十三讲: libgdx游戏引擎教程(十三)演员类的用户交互功能详解(附源码)  http://www.apkbus.com/android-60457-1-1.html

第十四讲:libgdx游戏引擎教程(十四)libgdx中常用的控件(附源码) http://www.apkbus.com/android-60569-1-1.html

最新更新 第十五讲 :libgdx游戏引擎教程(十五)在Libgdx中仿微信帮助滑动效果(附源码) http://www.apkbus.com/android-60822-1-1.html


SDK版俄罗斯方块源码下载(我们移植工作的素材)



实战一到五移植后的源码:


       我们接着实战三继续我们的移植工作(今晚我似乎讲了好几次这个话了=。=)
   
    第三讲结束的时候我们的移植工作已经做了大半了。这个时候的程序已经可以运行了。也可以看到方块在动了...这是真的,相信我...
  不过我们还是没有做一个工作,就是捕捉触摸事件,在libgdx版本的俄罗斯方块中,我们不再捕捉键盘事件来控制方块,完全采用触摸的形式来控制。控制方式如下图所示,整个方块表示整个手机屏幕。



还是采用我曾经说过的,在GameScreen的reder()函数中捕捉触摸事件的方法。
  1. if(Gdx.input.isTouched()){
  2.                                         int x=Gdx.input.getX();
  3.                                         int y=Gdx.input.getY();
  4.                                         if(x<(min/2)&&((y/x)>(max/min))&&y<(max-max*x/min)){
  5.                                                         toLeft();
  6.                                         }
  7.                                         if(x>(min/2)&&(y/x<(max/min))&&y>(max-max*x/min)){
  8.                                                         toRight();
  9.                                         }
  10.                                         if(((y/x)<(max/min))&&y<(max-max*x/min)){
  11.                                                         roll();
  12.                                         }
  13.                                         if(((y/x)>(max/min))&&y>(max-max*x/min)){
  14.                                                         toBelow();               
  15.                                         }
  16.                                 }
复制代码
当然这里还有一个问题,就像我们前几讲也曾经提到过的,render()函数运行得非常快,我们触摸一次的时间相对较长,那么就可能捕捉到很多次事件,那么该怎么办呢?我们可以在GameScreen.java里设置四个int型数:
  
  1. int left;
  2.         int right;
  3.         int roll;
  4.         int below;
复制代码
然后把以上判断触摸事件的代码改为:
  1. if(Gdx.input.isTouched()){
  2.                                         int x=Gdx.input.getX();
  3.                                         int y=Gdx.input.getY();
  4.                                         if(x<(min/2)&&((y/x)>(max/min))&&y<(max-max*x/min)){
  5.                                                 left++;
  6. //触摸检测到事件并做出相应的频率变为原来的三分之一
  7.                                                 if(left%3==0)
  8.                                                         toLeft();
  9.                                         }
  10.                                         if(x>(min/2)&&(y/x<(max/min))&&y>(max-max*x/min)){
  11.                                                 right++;
  12. //触摸检测到事件并做出相应的频率变为原来的三分之一
  13.                                                 if(right%3==0)
  14.                                                         toRight();
  15.                                         }
  16.                                         if(((y/x)<(max/min))&&y<(max-max*x/min)){
  17.                                                 roll++;
  18. //触摸检测到事件并做出相应的频率变为原来的三分之一
  19.                                                 if(roll%3==0)
  20.                                                         roll();
  21.                                         }
  22.                                         if(((y/x)>(max/min))&&y>(max-max*x/min)){
  23.                                                 below++;
  24. //触摸检测到事件并做出相应的频率变为原来的二分之一 ,因为下降的操作灵敏一些比较好
  25.                                                 if(below%2==0)
  26.                                                         toBelow();               
  27.                                         }
  28.                                 }
复制代码
        
我们用这个很简单的办法就降低了事件实际的捕获频率,
让游戏操作更自然一些,当然,灵敏度参数可以自行调整。


           
这样,初步的移植就完成了。当然我们现在还有一些移植进来的函数没有用到,比如
save(),read()函数等等,因为这些函数都是保存进度,读取进度的时候用的,我们先实现游戏功能,其他的我们一步步来。


          其实我写到这个时候已经迫不及待偷偷地自己运行了一下,还好...可以运行...我们暂时先不看看效果图,看看libgdx版俄罗斯方块移植到现在的代码吧:
         

         

        算了,还是看看效果图吧,我也有点忍不住了。当然为了达到以下的效果,比如在GameScreen中加入背景图什么的小的改动我就没有在这里细说,大家可以看看代码。这一讲我们就把目前为止移植好了的源码放上来给大家看看好了。下一讲我们将做目前整个移植工作做一个总结,贴出各部分的完整代码并对各部分的功能再做一个解释。



按一下下面的那个按钮...




    其实右上角有分数打印出来啦~!就是小了点...我懒了..没有把字体改大一点...大家将就看看吧=。=


Testin ID:ilovemkey@gmail.com 总的而言这个平台真的非常好用!我正是用这个平台发现了现在写的这个应用的一些内存管理方面的问题。另外建议能够在测试报告中看到某一台机型在整个执行过程中的cpu和内存占用的变化情况,这样可以更快地锁定问题。感谢Itestin让测试变得轻松了太多太多!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
君见一叶舟,出没风波里

0

主题

16

帖子

0

安币

初级码农

Rank: 1

发表于 2012-7-11 13:07:35 | 显示全部楼层
看看是什么东西先

1

主题

66

帖子

222

安币

程序猿

Rank: 2

QQ达人

发表于 2012-7-11 17:56:02 | 显示全部楼层
不错的   

1

主题

66

帖子

222

安币

程序猿

Rank: 2

QQ达人

发表于 2012-7-11 17:56:33 | 显示全部楼层
.......      

0

主题

46

帖子

171

安币

程序猿

Rank: 2

发表于 2012-7-12 17:01:49 | 显示全部楼层
哈哈,学到不少东西啊,感谢作者

39

主题

342

帖子

494

安币

禁止发言

QQ达人

发表于 2012-7-12 22:55:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
www.027hsdn.com 武汉电脑回收,武汉二手电脑回收

0

主题

9

帖子

20

安币

初级码农

Rank: 1

发表于 2012-7-14 09:53:05 | 显示全部楼层
xiexiexiexiexiexiexiexie

0

主题

37

帖子

25

安币

初级码农

Rank: 1

发表于 2012-7-19 14:13:42 | 显示全部楼层
不错不错,谢谢啦
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )