转自:http://www.apkbus.com/android-58418-1-1.html
SDK版俄罗斯方块源码下载(我们移植工作的素材)
Tetris_slide.rar(537.04 KB, 下载次数: 34)
实战一到五移植后的源码:
libgdxTetris.rar(3.93 MB, 下载次数: 100)
我们接着实战三继续我们的移植工作(今晚我似乎讲了好几次这个话了=。=)
第三讲结束的时候我们的移植工作已经做了大半了。这个时候的程序已经可以运行了。也可以看到方块在动了...这是真的,相信我...
不过我们还是没有做一个工作,就是捕捉触摸事件,在libgdx 版本的俄罗斯方块中,我们不再捕捉键盘事件来控制方块,完全采用触摸的形式来控制。控制方式如下图所示,整个方块表示整个手机屏幕。
还是采用我曾经说过的,在GameScreen的reder()函数中捕捉触摸事件的方法。
- if(Gdx.input.isTouched()){
- int x=Gdx.input.getX();
- int y=Gdx.input.getY();
- if(x<(min/2)&&((y/x)>(max/min))&&y<(max-max*x/min)){
- toLeft();
- }
- if(x>(min/2)&&(y/x<(max/min))&&y>(max-max*x/min)){
- toRight();
- }
- if(((y/x)<(max/min))&&y<(max-max*x/min)){
- roll();
- }
- if(((y/x)>(max/min))&&y>(max-max*x/min)){
- toBelow();
- }
- }
复制代码
当然这里还有一个问题,就像我们前几讲也曾经提到过的, render() 函数运行得非常快,我们触摸一次的时间相对较长,那么就可能捕捉到很多次事件,那么该怎么办呢?我们可以在GameScreen.java里设置四个 int 型数:
- int left;
- int right;
- int roll;
- int below;
复制代码
然后把以上判断触摸事件的代码改为:
- if(Gdx.input.isTouched()){
- int x=Gdx.input.getX();
- int y=Gdx.input.getY();
- if(x<(min/2)&&((y/x)>(max/min))&&y<(max-max*x/min)){
- left++;
- //触摸检测到事件并做出相应的频率变为原来的三分之一
- if(left%3==0)
- toLeft();
- }
- if(x>(min/2)&&(y/x<(max/min))&&y>(max-max*x/min)){
- right++;
- //触摸检测到事件并做出相应的频率变为原来的三分之一
- if(right%3==0)
- toRight();
- }
- if(((y/x)<(max/min))&&y<(max-max*x/min)){
- roll++;
- //触摸检测到事件并做出相应的频率变为原来的三分之一
- if(roll%3==0)
- roll();
- }
- if(((y/x)>(max/min))&&y>(max-max*x/min)){
- below++;
- //触摸检测到事件并做出相应的频率变为原来的二分之一 ,因为下降的操作灵敏一些比较好
- if(below%2==0)
- toBelow();
- }
- }
复制代码
我们用这个很简单的办法就降低了事件实际的捕获频率,
让游戏操作更自然一些,当然,灵敏度参数可以自行调整。
这样,初步的移植就完成了。 当然我们现在还有一些移植进来的函数没有用到,比如
save(),read() 函数等等,因为这些函数都是保存进度,读取进度的时候用的,我们先实现游戏功能,其他的我们一步步来。
其实我写到这个时候已经迫不及待偷偷地自己运行了一下,还好...可以运行...我们暂时先不看看效果图,看看libgdx版俄罗斯方块移植到现在的代码吧:
算了,还是看看效果图吧,我也有点忍不住了。当然为了达到以下的效果,比如在GameScreen中加入背景图什么的小的改动我就没有在这里细说,大家可以看看代码。这一讲我们就把目前为止移植好了的源码放上来给大家看看好了。下一讲我们将做目前整个移植工作做一个总结,贴出各部分的完整代码并对各部分的功能再做一个解释。
按一下下面的那个按钮...
其实右上角有分数打印出来啦~!就是小了点...我懒了..没有把字体改大一点...大家将就看看吧=。=