今天干货满满~发现如果只是跟着老师做程序,自己很容易一脸懵逼
所以说,还是需要基础知识的储备,我们今天通过讲解拼图小游戏,学习自定义控件的使用,之前也讲过一点,那学过了的当温习,没学过当预习
来~
当我们学习做小游戏的时候,我们应该首先有一个系统的规划,大概怎么做要知道。像我们想做拼图小游戏的时候,第一步应该是把图片进行导入,然后进行图片的切割。拼图游戏的小碎片并不是我们之前就切割好的,而是通过代码实现。然后进行后面的一系列工作。
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