From d1841f0b3ac0c9ac467b63232b7e0900ca7ece0e Mon Sep 17 00:00:00 2001 From: dvorakmortonxd Date: Fri, 23 Oct 2026 09:58:55 +0200 Subject: [PATCH] redesigned asset/made more accurate collisions --- src/main/java/dev/dvorakmortonxd/Game.java | 2 +- src/main/java/dev/dvorakmortonxd/input.java | 6 +++++- src/main/java/dev/dvorakmortonxd/update.java | 6 +++--- src/main/resources/assets/landingPlatform.png | Bin 638 -> 1725 bytes .../assets/landingPlatform.png-autosave.kra | Bin 0 -> 43028 bytes src/main/resources/assets/landingPlatform.png~ | Bin 0 -> 638 bytes 6 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 src/main/resources/assets/landingPlatform.png-autosave.kra create mode 100644 src/main/resources/assets/landingPlatform.png~ diff --git a/src/main/java/dev/dvorakmortonxd/Game.java b/src/main/java/dev/dvorakmortonxd/Game.java index 2179dcf..16bf841 100644 --- a/src/main/java/dev/dvorakmortonxd/Game.java +++ b/src/main/java/dev/dvorakmortonxd/Game.java @@ -52,7 +52,7 @@ public class Game extends JPanel implements ActionListener { public static BufferedImage playerRight2; // sets the FPS up (its 16 because 1000/60 is around 16.666 but it only accepts integers so its just rounded to 60) - public final Timer timer = new Timer(16, this); // 60 FPS (actually more so around 62.5 but thats kinda irrelevant) + public Timer timer = new Timer(16, this); // 60 FPS (actually more so around 62.5 but thats kinda irrelevant) // predefines the mouse position variables public int mouseX, mouseY; diff --git a/src/main/java/dev/dvorakmortonxd/input.java b/src/main/java/dev/dvorakmortonxd/input.java index 14cde92..783db8c 100644 --- a/src/main/java/dev/dvorakmortonxd/input.java +++ b/src/main/java/dev/dvorakmortonxd/input.java @@ -1,5 +1,6 @@ package dev.dvorakmortonxd; +import javax.swing.*; import java.awt.event.*; public class input implements KeyListener { @@ -15,6 +16,8 @@ public class input implements KeyListener { case KeyEvent.VK_A, KeyEvent.VK_LEFT -> m.leftHeld = true; case KeyEvent.VK_S, KeyEvent.VK_DOWN -> m.downHeld = true; case KeyEvent.VK_D, KeyEvent.VK_RIGHT -> m.rightHeld = true; + // debug + case KeyEvent.VK_TAB -> m.timer = new Timer(8, m); // speeds up the game animations (125fps) case KeyEvent.VK_SPACE -> { if (m.playerOnFeet) { m.playerYVelocity = m.jumpSpeed; @@ -27,7 +30,8 @@ public class input implements KeyListener { case KeyEvent.VK_ESCAPE -> System.exit(0); case KeyEvent.VK_CONTROL -> System.out.println("X+Y="+m.playerX+"+"+m.playerY); // THE LINE BELOW IS FOR ME WHEN DEBUGGING, I LEFT IT IN BECAUSE ITS IMPOSSIBLE TO KNOW ABOUT IT WITHOUT READING THE CODE LOL - case KeyEvent.VK_DELETE -> { + case KeyEvent.VK_TAB -> m.timer = new Timer(16, m); // slows back the game animations (62fps) + case KeyEvent.VK_SLASH -> { m.level = 3; m.playerActive = true; } diff --git a/src/main/java/dev/dvorakmortonxd/update.java b/src/main/java/dev/dvorakmortonxd/update.java index c507059..06cbeba 100644 --- a/src/main/java/dev/dvorakmortonxd/update.java +++ b/src/main/java/dev/dvorakmortonxd/update.java @@ -16,9 +16,9 @@ public class update { } public static double getGroundY(Game m) { if (m.level == 3) { - if (m.playerX > 274 && m.playerX < 583) { return 338; } else { return 366; } + if (m.playerX > 290 && m.playerX < 572) { return 338; } else { return 366; } } else { - return m.windowHeight; + return m.windowHeight-m.playerSizeY; } } static void performPerTick(Game m) { @@ -92,7 +92,7 @@ public class update { m.playerYVelocity = Math.min(m.playerYVelocity + m.gravity, m.maxFall); m.playerY += m.playerYVelocity; - // collisions + // jumping and landing mechanics + collisions double groundY = getGroundY(m); if (m.playerY+10 >= groundY) { // the +10 is so it feels like you can jump the instant you touch the ground even tho you technically are a bit above it, just makes the movement feel snappier m.playerY = (int) groundY; diff --git a/src/main/resources/assets/landingPlatform.png b/src/main/resources/assets/landingPlatform.png index e6e102f858dfc2b92625a6c398b498e04c6a1d11..b3db18c839d4a1002b25b33fa06e077d2f77e704 100644 GIT binary patch literal 1725 zcmchY`#;kQ1INE(c8LwoIz?2Nmuuvb
GlWWOX=aD0cXGB{Wj?20*mmzg>&81XJ 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 z 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 U`2Ke@feDJi)78&qol`;+0B4OIyZ`_I literal 0 HcmV?d00001