步骤五:为Column类添加属性
================
Column类中,各个属性表示的含义如图9所示。
在Column类中添加的代码如图10所示:
其中,image属性表示柱子贴图。
步骤六:为Bird类添加属性
==============
代码如图11所示:
image属性表示Bird类的贴图,x,y表示鸟的中心位置,width和height表示鸟图片的宽度和高度。在本实训项目中,小鸟的大小用一个正方形区域来表示,size即表示该正方形的边长,用于后续的碰撞检测。
步骤七:为BirdGame类添加构造方法,初始化属性
==========================
通过图12大家可以看出实例化Column类的时候,出现了编译错误,这是因为还没有为Column类编写一个带参数的构造器。
步骤八:为Column类添加构造方法,初始化属性
========================
下面介绍一下x、y坐标的计算方式,第一个柱子的x坐标为x= 432+118=550,第二根主子的x坐标为x=550+245,因此,柱子的x轴坐标可以总结为x = 550+245*(n-1),其中n表示第几根柱子。
可以看出,柱子y的坐标范围在132至350之间随机分布,使用Random类的nextInt方法生成[0-218)之间的随机数,然后再加上132,这样就能得到132至350之间的随机数了。
步骤十:为Bird类添加构造方法,初始化属性
======================
步骤九:为Ground类添加构造方法,初始化属性
步骤十一:编写main方法
=============
在main方法中,设置窗口的大小、居中、点击窗口的右上角“X”关闭窗口以及设置窗口可见,代码如图20所示。
步骤十二:绘制界面
=========
在BirdGame类中重写paint方法,绘制界面。首先绘制地面,代码如图21所示。
使用Graphics的drawImage方法,绘制背景界面的时候,绘制的起点坐标是(0,0)。然后,绘制2个柱子,代码如图22所示。
绘制两个柱子的时候,绘制的起点坐标与Column类的属性x,y的值不同,需要做一些更改,具体见图23。
步骤十三:运行
=======
运行BirdFrame类,显示的界面效果如图26所示。
步骤十四:实现地面的运动
============
步骤十五:实现柱子的移动
============
步骤十六:实现鸟的运动
===========
经过时间t的位移s的计算公式:
s = v0 * t + g * t * t / 2;
==============================
从图33可以看出,经过时间t后小鸟的纵坐标位置y1的计算公式为:
y1 = y - s;
===========
经过t时间后,小鸟的运行速度v为:
v = v0 - g * t ;
=================
此时,Bird类中添加的代码如下所示:
然后,实现鸟的动画处理。使用数组,存储要显示的图片,共计8张,鸟每运动一次换一张图片,以达到鸟的动画效果。此时,Bird类中添加的代码如下:
从上述代码中可以看出,fly方法实现了鸟的飞翔。一个数对8取余,能够得到0到7之间的数字,正好是images数组中的下标,index/12的目的是 使鸟的挥动翅膀次数变慢,即切换照片的频率变慢。
接着,在BirdGame类的action方法中,调用Bird类的fly方法和step方法。运行后,会发现鸟可以动起来了。代码如图34所示。
最后,计算倾角。假设水平移动的位移固定为8,那么倾角 = 反正切s/8,在Bird类中添加的代码如下所示:
上述代码中,调用Java API提供的反正切方法atam,计算倾角。
接着,在BirdGame类的paint中,为达到鸟的飞翔效果,使用Java API,使小鸟旋转,代码如图36所示。
步骤十七:实现鼠标监听事件
=============
要实现鼠标的按下事件,步骤如下:
-
使用“匿名内部类”声明事件
-
处理方法。即在BirdGame类的action方法声明事件的处理方法;
2、首先,在Bird类中添加flappy以实现鸟的飞翔。然后,在处理方法中,调用Bird类的flappy方法。
3、注册事件监听。即在BirdGame类的action方法中,注册监听事件。
在BirdGame类中添加的代码如图37所示。
在Bird类添加的代码如图38所示:
从图38可以看出,实现flappy方法,只需要将速度设置为初始速度v0即可。
步骤十八:实现计分
=========
要实现计分,需要进行以下操作:
1、在BirdGame类中增加属性score,用于计分,score初始化为0。
2、在BirdGame类的action方法的主循环中,添加逻辑判断。当柱子的x坐标与鸟的x坐标重合时,则加1分。
3、在BirdGame类的paint方法中将分数画出来。
在BirdGame类中增加的代码如下图所示:
步骤十九:实现鸟的碰撞检测
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们
目录:
Java面试核心知识点
一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
片转存中…(img-gYWrkCs1-1712790105388)]
Java面试核心知识点
已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了
[外链图片转存中…(img-K7XpHha9-1712790105388)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-hmLnwXd6-1712790105388)]