内容来自RyiSnow视频讲解
上一节提到的bug,不知道有没有人发现?
在播放音乐和音效的时候使用的是同一个clip对象,播放背景音乐在前,后续播放音效,clip对象就被覆盖了,因此导致调用停止播放背景音乐的时候,就无法停止了。
这一节实现了游戏窗口显示游戏中的一些数据,比如物品数量、所用时间、游戏通知…
文本绘制
在Java Swing的Graphics绘制中,drawString和draw其他对象的y坐标所表示的点是不同的,
一般来说y坐标代表的是绘制对象的左上角的y坐标,可是在绘制文字的时候,y坐标表示的是
文字的baseline,这一点常常使人感到迷惑和迷茫。因为baseline表示的既不是top顶部也不是
bottom底部,可以看下图,baseline表示的具体意思。
所以在绘制的时候要注意这一点,进行一些调整,以适应具体的位置。
关于文字的绘制,还有Ascent和Descent,调试看了一下,Graphics2D中的getFontMetrics()得到的是FontDesignMetrics实现类,40的字号,Ascent=47, Descent=12,不过这里用不到。
注意事项
在绘制循环调用的方法中,注意不要进行对象的实例化,因为60fps将会导致每秒创建60个对象,
会非常消耗时间和内存资源,提前初始化好,在draw方法中调用即可。
效果
-
玩家获得普通游戏物品
上图中,当玩家获得钥匙,左上角钥匙数量将发生变化。左边将出现一个文字说明,2秒后消失。 -
当玩家打开所有门,获得宝箱,游戏就结束了。
游戏结束后,有一个恭喜提示并显示所用时间,
代码
代码链接请参考第6篇文章底部,后续会把目前完成的功能打包一个可执行jar包,上传到下载中,可以下载下来执行java -jar jar文件名开始游戏。