用Java开发简单又好玩的——雷霆战机小游戏,几行代码就搞定
- 资源加载
- 音乐播放
- 创建类
- 创建爆炸和珍宝类
- 创建导弹和飞机类
- 鼠标键盘控制
新建项目:Java Project -> planewar
将图片文件资源和音乐文件资源拷贝到项目中
然后我们导入第三方的jar
我们将jar包存放的目录拷贝到项目中,防止找不到jar
选择项目属性
选择java build path,找到图示中jar的位置
我们创建如下包结构
然后我们开始编写代码:
我们创建一个类constant
我们再创建一个图片读取的工具类
我们创建一个窗体类,编写一个绘制图形的方法线程
构造方法
创建主窗体系
补充一部分代码
主方法
此时可以加载出图片
我们创建一个播放音乐的类
在主窗体中添加属性
我们读取对应的音乐文件
此时音乐可以正常播放
此时画面图片刷新有明显的闪动,我们再加一段代码
此时界面正常,没有闪烁现象
我们需要创建飞机、珍宝、导弹、爆炸、等实体
我们先创建一个方向类
我们先创建类Bullet
继续补充属性
初始化的图片
初始化的代码
构造方法
赋值属性
条件语句中的代码 表示是不是\”友好\”的
Else中包括一个if else 表示如果是敌方的,那么是不是Boss发出来的
不是boss的敌方
创建两个方法,的移动和绘制,需要控制是不是出界
击中飞机的方法
创建一个矩形
多个飞机击中判断
在主窗体中创建对应的属性就可以了
我们需要创建飞机、珍宝、导弹、爆炸、等实体
我们创建爆炸类
我们在主窗体中创建集合类
设置属性和对应的资源
设置构造方法和属性方法
我们绘制爆炸效果
我们继续创建珍宝类
在主窗体中创建集合类
创建对应的属性类
创建对应的构造方法和属性方法
创建绘制和移动方法
我们继续创建导弹类
我们创建集合类
我们编写对应的属性
两个构造方法和矩形绘制
编写绘制图形的代码
我们需要创建飞机、珍宝、导弹、爆炸、等实体
我们创建导弹类(其中会用到飞机类,我们先简单创建一个飞机类)
增加主窗体的集合类
我们继续创建导弹类
我们创建集合类
我们编写对应的属性
两个构造方法和矩形绘制
编写绘制图形的代码
我们创建移动方法
我们继续编写创建击中的方法
多个击中的方法
我们创建使用于boss敌机的导弹
对应的属性和构造方法
绘制方法和简单计算
移动方法(这个比较长注意看)
移动方法(这个比较长注意看)
创建击中方法
我们继续补充飞机类的内容
图片资源加载(代码较长注意)
构造方法
绘制方法和其它一些属性方法
控制按下的代码
释放的代码
开火的代码
BOSS
开火的代码
方向控制
移动方法
暴走方法
控制键盘和鼠标,我们现在主窗体添加一些属性
我们再创建一个线程类
对应的构造方法和属性
线程运行类
主窗体中我们添加新的内容
我们添加两个事件监听的方法
键盘监听
主方法执行
JVM调优解密:如何让你的Java应用飞起来?
Java虚拟机(JVM)调优通常包括内存管理、垃圾收集策略和其他性能相关的参数设置。以下是一些常用的JVM调优参数,以及它们的最佳实践:
-Xms: 设置JVM的初始堆大小。例如,-Xms512m设置初始堆大小为512MB。
-Xmx: 设置JVM的最大堆大小。例如,-Xmx2g设置最大堆大小为2GB。
最佳实践:
通常,将-Xms和-Xmx设置为相同的值可以减少JVM在运行时调整堆大小时的开销。
根据应用程序的实际需求进行调整。使用监控工具查看应用的实际内存使用情况,并据此调整。
-Xmn: 设置年轻代的大小。例如,-Xmn1g设置年轻代大小为1GB。
最佳实践:
年轻代的大小应该根据应用程序创建对象的频率进行调整。如果应用程序创建了大量短暂的对象,则应该分配更大的年轻代。
JVM提供了多种垃圾收集器,每种收集器都有其特点和用途。
-XX:+UseSerialGC: 使用Serial收集器。
-XX:+UseParallelGC: 使用Parallel收集器。
–XX:+UseConcMarkSweepGC: 使用CMS收集器。
-XX:+UseG1GC: 使用G1收集器。
最佳实践:
对于小到中等大小的堆和单线程应用程序,Serial收集器可能是一个不错的选择。
对于多线程应用程序和中到大型堆,Parallel或CMS是更好的选择。
G1收集器适用于具有大堆和低暂停时间要求的应用程序。
-XX:SurvivorRatio: 定义了Eden区与Survivor区的大小比例。
例如,-XX:SurvivorRatio=8表示Eden区的大小是Survivor区的8倍。
如果Eden区经常快速填满,导致频繁的Minor GC,您可以考虑调整此值。
最佳实践:
如果大部分对象在Eden区短时间内被回收,那么为Eden区分配更多的空间可能有助于减少Minor GC的频率。
-XX:MaxTenuringThreshold: 设置对象在被晋升到老年代之前可以在Survivor区存活的最大GC次数。
较低的值可能导致对象较早地被晋升到老年代,而较高的值可能导致Survivor区过早地填满。
最佳实践:
监视Survivor区的使用情况。如果Survivor区填满得很快,您可能需要增加MaxTenuringThreshold的值。相反,如果Survivor区的使用率很低,降低该值可能更有意义。
–Xss: 设置每个线程的堆栈大小。
这会影响应用程序可以创建的线程数量。过小的值可能导致StackOverflowError,而过大的值可能导致物理内存的浪费。
最佳实践:
根据应用程序的线程需求调整。对于不执行深度递归或大量本地方法调用的应用程序,较小的值可能就足够了。
-XX:PermSize 和 -XX:MaxPermSize: Java 8之前,这两个参数用于设置永久代的初始大小和最大大小。
-XX:MetaspaceSize 和 -XX:MaxMetaspaceSize: 从Java 8开始,永久代被元空间替代。这些参数用于设置元空间的初始和最大大小。
最佳实践:
如果您的应用程序加载和卸载大量的类(例如,在容器中运行的应用程序),可能需要增加这些值。
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:<path-to-log>: 这些参数用于启用详细的GC日志记录,其中<path-to-log>是GC日志文件的路径。
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M: 当GC日志可能变得非常大时,这些参数用于启用GC日志轮换。
最佳实践:
始终启用GC日志。这不会对性能产生显著影响,并为您提供有关GC性能和垃圾回收频率的宝贵信息。
这些只是JVM调优参数中的一部分,但它们是最常用的,并且在实际应用中经常需要调整的参数。当然,每个应用程序的需求都是独特的,所以在调整参数时,请确保您已经对应用程序的工作负载和性能有了深入的了解。
JVM调优是一个迭代的过程,需要根据应用程序的实际性能和监控数据进行调整。建议始终使用性能监控工具,如JVisualVM、JConsole等,以获得有关JVM和应用程序性能的实时数据。根据这些数据,您可以更好地决定如何设置和调整JVM参数以获得最佳性能。
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。