From bd1faa2f5e1550e7d8f5cc07b6997022d562a978 Mon Sep 17 00:00:00 2001 From: dvorakmortonxd Date: Tue, 20 Oct 2026 00:17:46 +0200 Subject: [PATCH] refined and continued the rocket animation, prepared the parachute asset files --- assets/parachute.png | Bin 0 -> 542 bytes assets/rocket_bottom.png | Bin 0 -> 924 bytes assets/rocket_top.png | Bin 0 -> 429 bytes src/main/java/dev/dvorakmortonxd/Game.java | 85 +++++++++++++-------- 4 files changed, 52 insertions(+), 33 deletions(-) create mode 100644 assets/parachute.png create mode 100644 assets/rocket_bottom.png create mode 100644 assets/rocket_top.png diff --git a/assets/parachute.png b/assets/parachute.png new file mode 100644 index 0000000000000000000000000000000000000000..6bcaf4a488eaa10db5524aea4d348bb537c41414 GIT binary patch literal 542 zcmV+(0^$9MP)$k2ey^9KSMIiAK zVP&GkEqP|6%zun1%oFq^!Xs{pAOWeg+Z?4&U%o465wnjI6QBUO)-nPmf*y{|Cw}OwJP>0Sp$Zu>wP7&&M#a|np)V715P_uZ znFV|PXYQiKQokfZ<_Z-v5)mI3S7XBw@?w`|N!MvlRd+&+pF%kGPP z+0_aWASCX+8lV97W{@io###Y#_q4HDb#h6>UPB!7=oxoa&QI+k!s4bqVL#&F3Bf90 ze9Ku0iI^z9#VNi3GE%RoKFcdM95d!ug+GpC`lm<#;&%pc*2b``jpYyT2^RckY}k!b zRn7`)!MjH%>~nB+7qpAmjZ$~-(}~~gMr{{_+r2uW-MIR>ko;F;92Q^cfor*M5%4d@ g=`EsVT&{@u1}@SncSz}}!TuGaO2?vmb}oUf)jo562G8CFe1Mmzaht@uE1TSe2v{cqwr<`4s1J zxy-72y^1TLA8T`R>! zffYy?%WEQ&P!qV_ZU?&g(&Gu7p-Y(rN6WO52JaE!SeXJLHq9hZFtX_?pH8O(-!v|X zcrmK>%}Fo-0!!fey5H|9Y%OYRNwBlU^5cYz=TZcT*A(DBVW-z>DTCjg?7c_jIl}foB3eR3L(75=&L_ zDl7>gpX&RV#L=`nks6u(9913>SSrlYc=j!p;)I`+IuSZEA_DR)w(^5H$2w-p9n?&ylXXC$>$X2Si-&={^70$-59Cj45bl_z{NWbbqM|1y+cFLUC zyZ){!RFQeZj)_RT3OwpU#sbNB?KC6s_w(~W_nw!N6Bag7Vt3%ENL;*MUtef=upuP| zwtH9JMK}%!JVp(zgmG93-a0Nnsv2Iy3FovvB#DVYR)y&6P6La4vxOjBqOB$(rk%0` zD6s}A!4PP9BcL=tih<@Je5^$CI`BZC%6q;DY-AIP3~J~#5zQ@)Z3UQ;KAt<%G1%fw zJ26t4NH<^67FS}Ibmn}FL1NJ%pc1bHF99-LB80)Tv}vcOQ;7g#7TM5AKKdJQP8@@e zNRUz9&RlHHwvkqbqh;r->@&=U6^3f8rj6KxD(wL_QG}tPt)|&6B#i93nhZ$Vk&RHG y|6@GOC0r%vk-8xfRk(4igsbEn09r$AHHLpI6Cx7Qjp29z000033epL zo|kbFrd#auW$CA=QelZ#!5o0}ht#_Vt+K4jY} z@U)@5MQd*HOE_@}2+ir#)j@O*;01>#6a1EU<;Eb@p1>sholcq3?M)C3@k6?Xf;X|^ zJ<$VF0nq5!OKRGwR`39bty6HYmap*1aroaG+YFF!T#~SLX|@_HtxJ8EBp|F8#I5!Z X4L)R!zHel#00000NkvXXu0mjf1I@L> literal 0 HcmV?d00001 diff --git a/src/main/java/dev/dvorakmortonxd/Game.java b/src/main/java/dev/dvorakmortonxd/Game.java index 9ab0908..6f7081b 100644 --- a/src/main/java/dev/dvorakmortonxd/Game.java +++ b/src/main/java/dev/dvorakmortonxd/Game.java @@ -59,11 +59,16 @@ public class Game extends JPanel implements ActionListener, KeyListener { private boolean hoveringOverQuitButton = false; private BufferedImage rocket; + private BufferedImage rocketTop; + private BufferedImage rocketBottom; private BufferedImage rocketExhaust; private int rocketYPre = windowHeight/2-125; private int rocketY = windowHeight/2-125; private int rocketExhaustY = rocketY; - private float opacityAnimation = 0.05f; + private int rocketBottomX; + private int rocketBottomY; + private float opacityAnimation = 0.03f; + private int detachTimer = 0; public Game() { // sets the window size @@ -90,6 +95,8 @@ public class Game extends JPanel implements ActionListener, KeyListener { buttonH = ImageIO.read(new File("assets/button_highlighted.png")); rocket = ImageIO.read(new File("assets/rocket.png")); rocketExhaust = ImageIO.read(new File("assets/rocket_exhaust.png")); + rocketTop = ImageIO.read(new File("assets/rocket_top.png")); + rocketBottom = ImageIO.read(new File("assets/rocket_bottom.png")); } catch (IOException e) { e.printStackTrace(); } @@ -126,7 +133,7 @@ public class Game extends JPanel implements ActionListener, KeyListener { } } if (level == 1) { planetY = planetYPre + hoverYOffset / 6; } - if (level == 2) { rocketY = rocketYPre + hoverYOffset / 3; rocketExhaustY = rocketYPre + 150 + hoverYOffset / 2;} + if (level == 2) { rocketY = rocketYPre + hoverYOffset / 3; rocketExhaustY = rocketYPre + 150 + hoverYOffset / 2; detachTimer++;} repaint(); // triggers render } @@ -188,12 +195,22 @@ public class Game extends JPanel implements ActionListener, KeyListener { for (int i = 0; i < MENU_STAR_COUNT; i++) { // drawing the stars g.fillOval(starX[i]-starSize, starY[i]-starSize, starSize, starSize); } - Graphics2D g2 = (Graphics2D) g; - g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacityAnimation)); - g2.drawImage(rocketExhaust, windowWidth/2-25, rocketExhaustY, 50, 100, this); - g2.setComposite(AlphaComposite.SrcOver); // reset so nothing else is transparent - g.drawImage(rocket, windowWidth/2-73, rocketY, 147, 234, this); + if (detachTimer < 240) { + Graphics2D g2 = (Graphics2D) g; + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacityAnimation)); + g2.drawImage(rocketExhaust, windowWidth / 2 - 25, rocketExhaustY, 50, 100, this); + g2.setComposite(AlphaComposite.SrcOver); // reset so nothing else is transparent + g.drawImage(rocket, windowWidth / 2 - 73, rocketY, 147, 234, this); + } else { + g.drawImage(rocketTop, windowWidth / 2 - 73, rocketY - hoverYOffset / 3, 147, 84, this); + + Graphics2D g2 = (Graphics2D) g; + rocketBottomX = windowWidth / 2 - 73; + rocketBottomY = rocketY - hoverYOffset / 3 + 64 + (detachTimer - 240) * 2; + g2.rotate(Math.toRadians((detachTimer-240)/3), rocketBottomX + 147 / 2, rocketBottomY + 171 / 2); + g2.drawImage(rocketBottom, rocketBottomX, rocketBottomY, 147, 171, this); + } if (levelProgress) { g.setColor(Color.BLACK); @@ -223,40 +240,42 @@ public class Game extends JPanel implements ActionListener, KeyListener { addMouseListener(new MouseAdapter() { @Override public void mousePressed(MouseEvent e) { - if (e.getButton() == MouseEvent.BUTTON1 && hoveringOverQuitButton) { - quitButtonX = quitButtonX - 5; - quitButtonY = quitButtonY + 5; + if (level == 1) { + if (e.getButton() == MouseEvent.BUTTON1 && hoveringOverQuitButton) { + quitButtonX = quitButtonX - 5; + quitButtonY = quitButtonY + 5; + } + if (e.getButton() == MouseEvent.BUTTON1 && hoveringOverPlayButton) { + playButtonX = playButtonX - 5; + playButtonY = playButtonY + 5; + } + if (e.getButton() == MouseEvent.BUTTON1 && hoveringOverPlanet) { + planetX = planetX - 2; + planetYPre = planetYPre + 2; + } } - if (e.getButton() == MouseEvent.BUTTON1 && hoveringOverPlayButton) { - playButtonX = playButtonX - 5; - playButtonY = playButtonY + 5; - } - if (e.getButton() == MouseEvent.BUTTON1 && hoveringOverPlanet) { - planetX = planetX-5; - planetYPre = planetYPre+5; - } - } }); addMouseListener(new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { - if (e.getButton() == MouseEvent.BUTTON1 && hoveringOverQuitButton) { - quitButtonX = quitButtonX + 5; - quitButtonY = quitButtonY - 5; - System.exit(0); + if (level == 1) { + if (e.getButton() == MouseEvent.BUTTON1 && hoveringOverQuitButton) { + quitButtonX = quitButtonX + 5; + quitButtonY = quitButtonY - 5; + System.exit(0); + } + if (e.getButton() == MouseEvent.BUTTON1 && hoveringOverPlayButton) { + playButtonX = playButtonX + 5; + playButtonY = playButtonY - 5; + levelProgress = true; + } + if (e.getButton() == MouseEvent.BUTTON1 && hoveringOverPlanet) { + planetX = planetX + 2; + planetYPre = planetYPre - 2; + } } - if (e.getButton() == MouseEvent.BUTTON1 && hoveringOverPlayButton) { - playButtonX = playButtonX + 5; - playButtonY = playButtonY - 5; - levelProgress = true; - } - if (e.getButton() == MouseEvent.BUTTON1 && hoveringOverPlanet) { - planetX = planetX+5; - planetYPre = planetYPre-5; - } - } }); }