SpriteBatch
这个类来实现
我们直接新建一个全局变量,然后也是在create
()方法初始化即可

文章插图
之后,在
render()
方法里,将我们的图片绘制出来override fun render() {//设置屏幕背景色ScreenUtils.clear(0f, 0f, 0.2f, 1f)//绘制图片batch.begin()batch.draw(bucketImage, 400f, 400f)batch.end()}
效果如下图所示:
文章插图
【2 Libgdx游戏开发——接水滴游戏实现】这里需要注意一个问题:
在Libgdx中,默认坐标系是以左下角为原点,也就是常规的数学坐标系,当然,也可以通过Camare进行修改,具体如何修改,这里先不研究
上述代码,我们将图片对象的左下角,绘制到屏幕的(400,400)坐标位置上
上面虽然我们成功绘制了一个图片,但是考虑到下述几个问题:
- 雨滴掉落需要改变y坐标,但是y坐标如何存储呢?
- 桶左右移动,需要改变x坐标,x坐标应该如何存储呢?
- 如何确认雨滴和桶的边界关系呢?
这里我们可以选用矩形
Rectangle
来存储我们的图片绘制位置PS:实际上,不只有我们通过定义矩形的左上角(x,y)坐标点和宽高,就可以确认一个Rectangle
矩形,还有其他的形状,但具体的使用,还是留在后面教程再进行补充吧
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
MathUtils
是Libgdx
提供的随机数工具类
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()}
效果如下所示:
文章插图
接下来,我们需要实现雨滴的下落功能,这里,我们可以采用时间作为变量,随着时间的变长来改
rainDrop
对象的y坐标数值override fun render() {batch.begin()batch.draw(dropImage, rainDrop.x, rainDrop.y)batch.end()rainDrop.y -= 200 * Gdx.graphics.deltaTime}
效果如下:
文章插图
可以看到,下落效果实现了,但是似乎出现了重复的东西,其实就是我们在开始的没清除掉上次绘制的图像,加上清除的代码即可:
override fun render() {//清除并设置屏幕背景色ScreenUtils.clear(0f, 0f, 0.2f, 1f)batch.begin()batch.draw(dropImage, rainDrop.x, rainDrop.y)batch.end()//每帧的时间,高度减少200rainDrop.y -= 200 * Gdx.graphics.deltaTime}

文章插图
8.判断雨滴是否掉落在桶里这里,就是需要判断边界了,上面也说到,使用Rectangle矩形,就是方便我们判断是否水滴和桶接触了
Rectangle
对象中,有个overlaps()
方法,就是专门来判断两个矩形是否重叠了//判断两个矩形的接触面积有重叠,即水滴掉落在桶里if (rainDrop.overlaps(bucket)) {//播放音效dropSound.play()}
9.键盘控制改变桶位置上面的功能已经基本完成了,那么还差通过键盘来控制桶的位置就能实现了我们判断是否按下方向键左或右来改变桶对应矩形的x坐标,这样就能改变桶的绘制位置了
override fun render() {//清除设置屏幕背景色ScreenUtils.clear(0f, 0f, 0.2f, 1f)batch.projectionMatrix = camera.combinedbatch.begin()batch.draw(bucketImage, bucket.x, bucket.y)batch.draw(dropImage, rainDrop.x, rainDrop.y)batch.end()rainDrop.y -= 200 * Gdx.graphics.deltaTime//键盘输入判断if (Gdx.input.isKeyPressed(Input.Keys.LEFT)) bucket.x -= 200 * Gdx.graphics.deltaTimeif (Gdx.input.isKeyPressed(Input.Keys.RIGHT)) bucket.x += 200 * Gdx.graphics.deltaTime//判断两个矩形的接触面积有重叠,即水滴掉落在桶里if (rainDrop.overlaps(bucket)) {//播放音效dropSound.play()//模拟消失(让水滴图片消失在游戏屏幕内)rainDrop.y = -64f}}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 五 Qt+ECharts开发笔记:ECharts的动态排序柱状图介绍、基础使用和Qt封装Demo
- Asp-Net-Core开发笔记:集成Hangfire实现异步任务队列和定时任务
- 我的世界网易游戏版龙蛋怎么孵化(我的世界网易版本孵龙蛋)
- 自定义View6 -塔防小游戏:第三篇防御塔随意放置+多组野怪
- 【疫情动态条形图】用Python开发全球疫情排名动态条形图bar_chart_race
- 全民飞行棋如何玩(飞行棋游戏怎么玩)
- 飞行棋玩法教程(飞行棋游戏情调版图片)
- 1 Libgdx游戏学习——环境配置及demo运行
- 军棋这个游戏怎么玩(军棋属于什么游戏)
- 驱动开发:通过Async反向与内核通信