安卓第五趴

今天干货满满~发现如果只是跟着老师做程序,自己很容易一脸懵逼

图片

所以说,还是需要基础知识的储备,我们今天通过讲解拼图小游戏,学习自定义控件的使用,之前也讲过一点,那学过了的当温习,没学过当预习

来~

   当我们学习做小游戏的时候,我们应该首先有一个系统的规划,大概怎么做要知道。像我们想做拼图小游戏的时候,第一步应该是把图片进行导入,然后进行图片的切割。拼图游戏的小碎片并不是我们之前就切割好的,而是通过代码实现。然后进行后面的一系列工作。

1.还记得我们怎么导入一个图片么?

图片

图片

就是这两个语句。

    当然,如果我们要导入的是一个背景图,也不需要对图像进行额外的什么处理,直接在RelativeLayout里添加背景图就好啦,怎么添加之前也有讲到过的哦。

2. 我们对图片进行切割

    那我们需要写一个切割方法,我们把这个方法单拎出来,放在一个class里面。那如果单拎出来的话,我们这个方法就应该是类方法。还记得我们之前讲java的时候说过很多次,static修饰词的作用。如果我没记错的话,用static修饰的方法是类方法,供类使用,可以直接通过类调用,也可以通过实例来调用:

图片

这就是我们方法头的写法。圆括号内的参数含义是:传入的完整的大图像bitmap和要切成的块数。我们拼图游戏是一个正方形的,所以pieces代表每行切成几个(每列切成几个)

大家应该也发现了,这里面有一个List<ImagePiece>,这是什么呢?

上次我们讲过了List是一个集合,我在学习的时候有些困惑,它和数组的区别是什么呢?有时候感觉是一样的啊。相信大家也想知道区别所在:

图片

·其实这里我还有一个问题,List后面的尖括号里是什么类型?或者说什么类型都可以?按集合来理解的话应该是这样的。因为集合就是有相同性质的一类元素的综合。(谁知道可以跟我说一下哦,谢过)。

我们这里的List后面的是ImagePiece,指的是:图片分割以后每个小图片的有关属性(索引值和图像)。

我们定义一个类来专门放这个东西:

图片

在图中,我给大家写了些注释,帮助理解。

这里我们涉及到了setter和getter方法,就是我用框框圈出来的。setter和getter方法是一种封装,对程序健壮性有很大的帮助。那到底有什么意义呢?

图片

所以我们就懂了为什么要用这两个方法了。至于写法,需要我们熟悉并学会使用。

    我们考虑一下,如果是要切图,那我们该怎么切?切下来的图放在哪?

    好,先回答第一个问题:

    我们先得确定一下把图切成几乘几的,常见的是3*3。以这个为例,就是说我们需要依次获得9个图片碎块。3行3列。切图片实际上是获得每个碎片所在的x,y坐标(以图片的左上角为准),进而设置碎片的图片信息,包括索引和图像。我们通过for循环实现,双重循环。

图片

我们的图片索引做法是酱紫的:

图片

这些数字就是索引。所以上面索引的算法就知道了。

至于第一个红框框,指的就是我们新切的图片。有了左上角的x和y值,还有碎片的宽度,一个图就可以得到了。

到这里我们的图片切割功能就完成了。

        其实今天还完成了将碎片乱序这一步,但是时间限制写不了太多了,感觉重点在后面这一步。。。

图片

    END


原创不易,请多多支持与关注~

猜你喜欢

转载自blog.csdn.net/allein_STR/article/details/113988179