2 Libgdx游戏开发——接水滴游戏实现( 二 )

稍微讲解下用到的几个类,具体知识得后面再新开文章进行研究

  • Texture 这个英文翻译是纹理,但其实可以看做成图片的内存对象,类似Android开发里的Bitmap
  • Sound 比较短的那种音效文件
  • Music 时长较长的音频文件
5.播放背景音乐之后我们可以实现播放背景音乐了,这个我们也直接在资源文件加载完毕之后播放吧
//设置循环播放背景音乐rainMusic.setLooping(true)rainMusic.play()这个时候,我们可以进入到desktop里的那个文件,点击箭头运行游戏
2 Libgdx游戏开发——接水滴游戏实现

文章插图
游戏界面是黑屏的,但是已经开始播放音乐了,这里就不放图了
6.绘制图形上述加载资源文件,我们已经得到了两个Texture对象,这个时候我们需要将其画出来,可以通过SpriteBatch这个类来实现
我们直接新建一个全局变量,然后也是在create()方法初始化即可
2 Libgdx游戏开发——接水滴游戏实现

文章插图
之后,在render()方法里,将我们的图片绘制出来
override fun render() {//设置屏幕背景色ScreenUtils.clear(0f, 0f, 0.2f, 1f)//绘制图片batch.begin()batch.draw(bucketImage, 400f, 400f)batch.end()}效果如下图所示:
2 Libgdx游戏开发——接水滴游戏实现

文章插图
【2 Libgdx游戏开发——接水滴游戏实现】这里需要注意一个问题:
在Libgdx中,默认坐标系是以左下角为原点,也就是常规的数学坐标系,当然,也可以通过Camare进行修改,具体如何修改,这里先不研究
上述代码,我们将图片对象的左下角,绘制到屏幕的(400,400)坐标位置上
上面虽然我们成功绘制了一个图片,但是考虑到下述几个问题:
  • 雨滴掉落需要改变y坐标,但是y坐标如何存储呢?
  • 桶左右移动,需要改变x坐标,x坐标应该如何存储呢?
  • 如何确认雨滴和桶的边界关系呢?
考虑到上述的问题,单纯的坐标点记录会使后续的流程代码变得十分的复杂,这个时候我们可以引入一个范围来记录相关的坐标点信息
这里我们可以选用矩形Rectangle来存储我们的图片绘制位置
PS:实际上,不只有Rectangle矩形,还有其他的形状,但具体的使用,还是留在后面教程再进行补充吧
我们通过定义矩形的左上角(x,y)坐标点和宽高,就可以确认一个Rectangle矩形范围了,如下代码所示:
val bucket = Rectangle().apply {//桶放中间x = (800 / 2 - 64 / 2).toFloat()y = 20.toFloat()width = 64.toFloat()height = 64.toFloat()}由于此矩形区域是我们用来找回进行边界关系的比对,所以将其宽高都设置为与图片图像的分辨率一样(64*64)
这样一来,我们使用batch.draw()方法绘制的时候,能将图片对象刚好覆盖到矩形范围里
batch.begin()batch.draw(bucketImage, bucket.x, bucket.y)batch.end()7.雨滴下落实现按照上述的逻辑,我们也创建一个雨滴的矩形范围,并将其绘制出来
雨滴默认在最上面,由于绘制图片的时候以左下角来绘制的,所以,最大y坐标减去64,即是雨滴开始的固定高度
然后雨滴的x坐标是随机的,但是最大范围为800减去宽度64
MathUtilsLibgdx提供的随机数工具类
val rainDrop = Rectangle().apply {//x坐标随机x = MathUtils.random(0, 800 - 64).toFloat()y = (480 - 64).toFloat()width = 64.toFloat()height = 64.toFloat()}override fun render() {batch.projectionMatrix = camera.combinedbatch.begin()batch.draw(dropImage, rainDrop.x, rainDrop.y)batch.end()}

经验总结扩展阅读