游戏效果
视频链接:https://www.bilibili.com/video/BV14v411h75H/
一、准备素材
在 core/assets/
文件夹下准备以下图片:
-
bg.jpg
背景图 -
bird_*.png
小鸟翅膀「上下煽动」的逐帧图 -
land.png
草地 -
pipe_*.png
管道
二、分解代码
- 设置游戏名称、游戏宽高。
- 背景图。
背景图没有动画效果的要求。静止放置,撑满屏幕即可。
-
Gdx.graphics.getWidth()
获取游戏窗口的「宽度」 -
Gdx.graphics.getHeight()
获取游戏窗口的「高度」
- 不断向左移动的草地。
我们不太可能有一张可以不断向左移动的、超级长的草地图片,因为我们的UI设计师并不能确定玩家可能会玩多久、究竟需要给程序员提供多长的草地图片。但我们却可以在代码层面,将短的草地图片不断的向后拼接,来获得一张看起来像是无限长的草地图片。
具体实现:
!!我们并没有真的先去拼接一个接近无限长的草地图片出来!! 即使代码上可以做到这一点,生成这张图片需要耗费的时间、承载游戏的设备性能也都还是个头疼的问题。而是只用到了两块草地,和一个解决类似场景的通用技巧。
- 加载两块草地。
代码中,两块草地的初始位置如下:
游戏开始后,两块草地会不断的向左移动。假设5秒后,两块草地的位置如下:
那么,在第10秒,左边的草地会完全移出屏幕左侧:
此时,玩家已经完全看不到它了。但我们不去销毁它、扔掉它,而是将其放至屏幕右侧,重复利用它。即:不断的将已经移出屏幕左侧、对玩家已经不可见的草地瞬移到屏幕右侧,让它可以继续向左移动。这样是不是只用两块草地,就能实现一个看起来无限长的移动草坪了呐。
为了方便大家理解这个小技巧。小匠做了3个演示动画。^_^#
- 动画1:含位置变化的中间过程。实际游戏时,则是瞬间完成位置变化的。
- 动画2:去掉了位置变化的中间过程。
- 动画3:实际游戏效果。
- 管道。
管道的出现需要一定的随机性,如左右位置间隔、及上下两根管道之间的缝隙大小。
我们用定时器(可以随机时间,小匠这里暂时固定每5秒出现下次管道)来控制管道出现的时机,以实现管道之间的左右位置间隔。
再用一个随机数,来实现上下两根管道之间缝隙大小的随机。
- 小鸟
还记得我们准备了3张小鸟「上下煽动」翅膀的帧图嘛?
libGDX为我们提供了 Animation
类,来播放这样的帧图序列。
frameDuration
每两帧之间的时间间隔(秒)。
三、代码预览
- MyGdxGame.java
- 小鸟:Bird.java
-
草坪:Land.java
草坪 -
管道:Pipes.java
如果大家有什么疑问,欢迎在评论区留言!或者私信给小匠噢。^_^#
( 本节完 )
- 相关阅读 >>
网友评论