首页>代码>基于java swing的飞鸟小游戏>/FlyBird/src/game/Bird.java
package game;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
/**
 * 小鸟
 */
public class Bird {
	//图片
	BufferedImage image;
	//位置
	int x,y;
	//宽高
	int width,height;
	//大小(用于碰撞检测)
	int size;
	//重力加速度
	double g;
	//位移的间隔时间
	double t;
	//最初上抛速度
	double v0;
	//当前上抛速度
	double speed;
	//经过时间t之后的位移
	double s;
	//小鸟的倾角(弧度)
	double alpha;
	//一组图片,记录小鸟的动画帧
	BufferedImage[] images;
	//动画帧数组的下标
	int index;
	//初始化小鸟
	public Bird() throws Exception{
		//初始化基本参数
		image =ImageIO.read(getClass().getResource("/resources/0.png"));
		width=image.getWidth();
		height=image.getHeight();
		x=132;
		y=280;
		size=40;
		//初始化位移参数
		g=4;
		v0=20;
	    t=0.25;
	    speed=v0;
	    s=0;
	    alpha=0;
	    //初始化动画帧参数
	    images=new BufferedImage[8];
	    images[0] =ImageIO.read(getClass().getResource("/resources/0.png"));
	    images[1] =ImageIO.read(getClass().getResource("/resources/1.png"));
	    images[2] =ImageIO.read(getClass().getResource("/resources/2.png"));
	    images[3] =ImageIO.read(getClass().getResource("/resources/3.png"));
	    images[4] =ImageIO.read(getClass().getResource("/resources/4.png"));
	    images[5] =ImageIO.read(getClass().getResource("/resources/5.png"));
	    images[6] =ImageIO.read(getClass().getResource("/resources/6.png"));
	    images[7] =ImageIO.read(getClass().getResource("/resources/7.png"));
	 //   for(int i=0;i<8;i++) {
	//    	images[i]=ImageIO.read(getClass().getResource("/resources/"+i+".png"));
	    	
	 //   }
	    index=0;
	}
	//飞行动作
	public void fly() {
		index++;
		image=images[(index/12)%8];
	}
	//移动一步
	public void step() {
		double v0=speed;
		//计算上抛运动位移
		s=v0*t+g*t*t/2;
		//计算鸟的坐标位置
		y=y-(int)s;
		//计算下次移动速度
		double v=v0-g*t;
		speed=v;
		//计算倾角(反正切函数)
		alpha=Math.atan(s/8);
	}
	//向上飞行
	public void flappy() {
		//重置速度
		speed=v0;
	}
	//检测小鸟是否碰撞到地面
	public boolean hit(Ground ground) {
		boolean hit=y+size/2>ground.y;
		if(hit) {
			y=ground.y-size/2;
			alpha=-3.14159265358979323/2;
		}
		return hit;
	}
	//检测小鸟是否撞到柱子
	public boolean hit(Column column) {
		//先检测是否在柱子的范围内
		if(x>column.x-column.width/2-size/2
				&&x<column.x+column.width/2+size/2) {
			//再检测是否在柱子的缝隙中
			if(y>column.y-column.gap/2-size/2
					&&y<column.y+column.gap/2-size/2) {
				return false;
			}
			return true;
		}
		return false;
	}

}
最近下载更多
微信网友_6191697646571520  LV6 2022年10月27日
迷迭香  LV10 2022年9月22日
zxy135201  LV5 2022年9月16日
agjbvfhjbg  LV6 2022年9月9日
jackzhang123  LV2 2022年9月3日
cuijunjie  LV3 2022年7月2日
java代写  LV7 2022年6月4日
Yj1009  LV2 2022年6月2日
牛牛最棒哈哈  LV3 2022年5月31日
askdkashdkahsdhah  LV2 2022年5月30日
最近浏览更多
暂无贡献等级
鬼屋报道  LV3 6月1日
不不要  LV1 5月15日
847214276 5月14日
暂无贡献等级
yq312672546  LV1 2月22日
axdfer 1月4日
暂无贡献等级
bssheep  LV1 2023年12月31日
sjshsj 2023年12月21日
暂无贡献等级
潘润之 2023年12月20日
暂无贡献等级
houyuxin  LV2 2023年11月29日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友