美文网首页
IT匠心说 - Java游戏开发《像素鸟》

IT匠心说 - Java游戏开发《像素鸟》

作者: IT匠心说 | 来源:发表于2021-03-09 01:32 被阅读0次

    游戏效果

    视频链接:https://www.bilibili.com/video/BV14v411h75H/

    一、准备素材

    core/assets/ 文件夹下准备以下图片:

    • bg.jpg 背景图
    • bird_*.png 小鸟翅膀「上下煽动」的逐帧图
    • land.png 草地
    • pipe_*.png 管道

    二、分解代码

    1. 设置游戏名称、游戏宽高。
    1. 背景图。

    背景图没有动画效果的要求。静止放置,撑满屏幕即可。

    • Gdx.graphics.getWidth() 获取游戏窗口的「宽度」
    • Gdx.graphics.getHeight() 获取游戏窗口的「高度」
    1. 不断向左移动的草地。

    我们不太可能有一张可以不断向左移动的、超级长的草地图片,因为我们的UI设计师并不能确定玩家可能会玩多久、究竟需要给程序员提供多长的草地图片。但我们却可以在代码层面,将短的草地图片不断的向后拼接,来获得一张看起来像是无限长的草地图片。

    具体实现:

    !!我们并没有真的先去拼接一个接近无限长的草地图片出来!! 即使代码上可以做到这一点,生成这张图片需要耗费的时间、承载游戏的设备性能也都还是个头疼的问题。而是只用到了两块草地,和一个解决类似场景的通用技巧。

    • 加载两块草地。

    代码中,两块草地的初始位置如下:

    游戏开始后,两块草地会不断的向左移动。假设5秒后,两块草地的位置如下:

    那么,在第10秒,左边的草地会完全移出屏幕左侧:

    此时,玩家已经完全看不到它了。但我们不去销毁它、扔掉它,而是将其放至屏幕右侧,重复利用它。即:不断的将已经移出屏幕左侧、对玩家已经不可见的草地瞬移到屏幕右侧,让它可以继续向左移动。这样是不是只用两块草地,就能实现一个看起来无限长的移动草坪了呐。

    为了方便大家理解这个小技巧。小匠做了3个演示动画。^_^#

    • 动画1:含位置变化的中间过程。实际游戏时,则是瞬间完成位置变化的。
    • 动画2:去掉了位置变化的中间过程。
    • 动画3:实际游戏效果。
    1. 管道。

    管道的出现需要一定的随机性,如左右位置间隔、及上下两根管道之间的缝隙大小。

    我们用定时器(可以随机时间,小匠这里暂时固定每5秒出现下次管道)来控制管道出现的时机,以实现管道之间的左右位置间隔。

    再用一个随机数,来实现上下两根管道之间缝隙大小的随机。

    1. 小鸟

    还记得我们准备了3张小鸟「上下煽动」翅膀的帧图嘛?

    libGDX为我们提供了 Animation 类,来播放这样的帧图序列。

    frameDuration 每两帧之间的时间间隔(秒)。

    三、代码预览

    • MyGdxGame.java
    MyGdxGame.java
    • 小鸟:Bird.java
    小鸟
    • 草坪:Land.java


      草坪
    • 管道:Pipes.java

    管道

    如果大家有什么疑问,欢迎在评论区留言!或者私信给小匠噢。^_^#

    ( 本节完 )

    • 相关阅读 >>

    IT匠心说 - Java游戏开发《预备篇》

    相关文章

      网友评论

          本文标题:IT匠心说 - Java游戏开发《像素鸟》

          本文链接:https://www.haomeiwen.com/subject/fyxdqltx.html