From 4cc7c4e2fbaae258246615770ec82014e050d7a9 Mon Sep 17 00:00:00 2001 From: kingyuluk Date: Sat, 8 Aug 2020 15:03:52 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BA=86=E6=9F=90?= =?UTF-8?q?=E7=A7=8D=E6=83=85=E5=86=B5=E4=B8=8B=E5=B0=8F=E9=B8=9F=E6=AD=BB?= =?UTF-8?q?=E5=90=8E=E4=BC=9A=E7=BB=A7=E7=BB=AD=E4=B8=8A=E5=8D=87=E7=9A=84?= =?UTF-8?q?bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FlappyBird.jar | Bin 24532 -> 24442 bytes src/com/bird/main/Bird.java | 68 +++++++++++++++---------------- src/com/bird/main/GameReady.java | 3 +- src/com/bird/util/GameUtil.java | 12 ++++-- 4 files changed, 41 insertions(+), 42 deletions(-) diff --git a/FlappyBird.jar b/FlappyBird.jar index 1e7e10bbe32dda6815d8ca1270ddc1462e824c4d..c3c765c018e4cbe21b1d0e02f44d8679615e53c8 100644 GIT binary patch delta 6229 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 T@MmB`${Px~H>^J!{HFaMh5rmI delta 6335 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 V;+`cJ5iNig@EwJD^ucc{{{so?6AS> 1); + final int topBoundary = -50; + switch (state) { case STATE_DOWN: - // 物理公式 + // 自由落体 speed -= g * T; - // 小鸟y轴的位移量 double h = speed * T - g * T * T / 2; - y = (int) (y - h); - birdRect.y = (int) (birdRect.y - h); - // 控制坠落的边界,若y坐标 > 窗口的高度 - 地面的高度 - 小鸟图片的高度则死亡 - if (birdRect.y >= Constant.FRAME_HEIGHT - Constant.GROUND_HEIGHT - (birdImages[state][0].getHeight() >> 1)) { - y = Constant.FRAME_HEIGHT - Constant.GROUND_HEIGHT - (birdImages[state][0].getHeight() >> 1); - birdRect.y = Constant.FRAME_HEIGHT - Constant.GROUND_HEIGHT - (birdImages[state][0].getHeight() >> 1); - birdFall(); + y = Math.min((int) (y - h), bottomBoundary); + birdRect.y = Math.min((int) (birdRect.y - h), bottomBoundary); + if (birdRect.y == bottomBoundary) { + MusicUtil.playCrash(); + birdDead(); } - break; case STATE_FALL: - // 鸟死亡,自由落体 + // 自由落体 speed -= g * T; h = speed * T - g * T * T / 2; - y = (int) (y - h); - birdRect.y = (int) (birdRect.y - h); - - // 控制坠落的边界,若y坐标 > 窗口的高度 - 地面的高度 - 小鸟图片的高度则死亡 - if (birdRect.y >= Constant.FRAME_HEIGHT - Constant.GROUND_HEIGHT - (birdImages[state][0].getHeight() >> 1)) { - - y = Constant.FRAME_HEIGHT - Constant.GROUND_HEIGHT - (birdImages[state][0].getHeight() >> 1); - birdRect.y = Constant.FRAME_HEIGHT - Constant.GROUND_HEIGHT - (birdImages[state][0].getHeight() >> 1); - - GameFrame.setGameState(GameFrame.STATE_OVER); // 改变游戏状态 + y = Math.min((int) (y - h), bottomBoundary); + birdRect.y = Math.min((int) (birdRect.y - h), bottomBoundary); + if (birdRect.y == bottomBoundary) birdDead(); - } + break; + + case STATE_DEAD: + GameFrame.setGameState(GameFrame.STATE_OVER); break; case STATE_NORMAL: case STATE_UP: - case STATE_DEAD: break; } // 控制上方边界 - if (birdRect.y < -1 * Constant.TOP_PIPE_LENGTHENING / 2) { - birdRect.y = -1 * Constant.TOP_PIPE_LENGTHENING / 2; - y = -1 * Constant.TOP_PIPE_LENGTHENING / 2; + if (birdRect.y < topBoundary) { + birdRect.y = topBoundary; + y = topBoundary; } - // 控制下方边界 - if (birdRect.y > Constant.FRAME_HEIGHT - Constant.GROUND_HEIGHT - (image.getHeight() >> 1)) { - birdFall(); - } } // 小鸟振翅 @@ -194,6 +182,13 @@ public void birdDown() { public void birdFall() { state = STATE_FALL; MusicUtil.playCrash(); // 播放音效 + speed = 0; // 速度置0,防止小鸟继续上升与水管重叠 + // 死后画面静止片刻 + try { + Thread.sleep(200); + } catch (InterruptedException e) { + e.printStackTrace(); + } } // 小鸟死亡 @@ -208,6 +203,7 @@ public void birdDead() { countScore.isSaveScore(); // 判断是否保存纪录 } + // 判断小鸟是否死亡 public boolean isDead() { return state == STATE_FALL || state == STATE_DEAD; } @@ -258,7 +254,7 @@ private void drawGameOver(Graphics g) { // 绘制继续游戏,使图像闪烁 final int COUNT = 30; // 闪烁周期 if (flash++ > COUNT) - drawTitle(againImg, g); + GameUtil.drawImage(againImg,Constant.FRAME_WIDTH - againImg.getWidth() >> 1, Constant.FRAME_HEIGHT / 5 * 3, g); if (flash == COUNT * 2) // 重置闪烁参数 flash = 0; } diff --git a/src/com/bird/main/GameReady.java b/src/com/bird/main/GameReady.java index c5a3cb5..a0f2a36 100644 --- a/src/com/bird/main/GameReady.java +++ b/src/com/bird/main/GameReady.java @@ -4,7 +4,6 @@ import java.awt.image.BufferedImage; import com.bird.util.Constant; import com.bird.util.GameUtil; -import static com.bird.util.GameUtil.drawTitle; /** * 游戏启动界面类 @@ -34,7 +33,7 @@ public void draw(Graphics g) { // 使notice的图像闪烁 final int COUNT = 30; // 闪烁周期 if (flash++ > COUNT) - drawTitle(noticeImg, g); + GameUtil.drawImage(noticeImg, Constant.FRAME_WIDTH - noticeImg.getWidth() >> 1, Constant.FRAME_HEIGHT / 5 * 3, g); if (flash == COUNT * 2) // 重置闪烁参数 flash = 0; } diff --git a/src/com/bird/util/GameUtil.java b/src/com/bird/util/GameUtil.java index 293bb98..d571cb0 100644 --- a/src/com/bird/util/GameUtil.java +++ b/src/com/bird/util/GameUtil.java @@ -81,10 +81,14 @@ public static int getStringHeight(Font font, String str) { } - // 于屏幕x轴中央、y轴3/5处绘制图像 - public static void drawTitle(BufferedImage image, Graphics g) { - int x = Constant.FRAME_WIDTH - image.getWidth() >> 1; - int y = Constant.FRAME_HEIGHT / 5 * 3; + /** + * + * @param image:图片资源 + * @param x:x坐标 + * @param y:y坐标 + * @param g:画笔 + */ + public static void drawImage(BufferedImage image, int x, int y, Graphics g) { g.drawImage(image, x, y, null); }