From 394b8475bbbb85716835ef4075f96e3f627d4945 Mon Sep 17 00:00:00 2001 From: lul11003 Date: Sat, 4 Apr 2015 12:55:00 -0400 Subject: [PATCH] wip animation --- MerchantRPGCSE2102/.classpath | 3 +- .../.settings/org.eclipse.jdt.core.prefs | 6 +- MerchantRPGCSE2102/src/images/testsprite.png | Bin 0 -> 8443 bytes MerchantRPGCSE2102/src/sprites/Animation.java | 102 ++++++++++++++++++ MerchantRPGCSE2102/src/sprites/Frame.java | 29 +++++ .../src/sprites/PlayerSprite.java | 28 +++++ MerchantRPGCSE2102/src/sprites/Sprite.java | 36 +++++++ 7 files changed, 200 insertions(+), 4 deletions(-) create mode 100644 MerchantRPGCSE2102/src/images/testsprite.png create mode 100644 MerchantRPGCSE2102/src/sprites/Animation.java create mode 100644 MerchantRPGCSE2102/src/sprites/Frame.java create mode 100644 MerchantRPGCSE2102/src/sprites/Sprite.java diff --git a/MerchantRPGCSE2102/.classpath b/MerchantRPGCSE2102/.classpath index e1badea..964c4ef 100644 --- a/MerchantRPGCSE2102/.classpath +++ b/MerchantRPGCSE2102/.classpath @@ -1,8 +1,9 @@ - + + diff --git a/MerchantRPGCSE2102/.settings/org.eclipse.jdt.core.prefs b/MerchantRPGCSE2102/.settings/org.eclipse.jdt.core.prefs index 838bd9d..54e493c 100644 --- a/MerchantRPGCSE2102/.settings/org.eclipse.jdt.core.prefs +++ b/MerchantRPGCSE2102/.settings/org.eclipse.jdt.core.prefs @@ -1,11 +1,11 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.7 +org.eclipse.jdt.core.compiler.compliance=1.6 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.7 +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/MerchantRPGCSE2102/src/images/testsprite.png b/MerchantRPGCSE2102/src/images/testsprite.png new file mode 100644 index 0000000000000000000000000000000000000000..99d022279cbc8c4d3240f8a877a9bcbea3b4b05c GIT binary patch literal 8443 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 xGGOh(qblC}*LVa@#hR%Q0Fv-0pBw(%V frames = new ArrayList(); // Arraylist of frames + + public Animation(BufferedImage[] frames, int frameDelay) { + this.frameDelay = frameDelay; + this.stopped = true; + + for (int i = 0; i < frames.length; i++) { + addFrame(frames[i], frameDelay); + } + + this.frameCount = 0; + this.frameDelay = frameDelay; + this.currentFrame = 0; + this.animationDirection = 1; + this.totalFrames = this.frames.size(); + + } + + public void start() { + if (!stopped) { + return; + } + + if (frames.size() == 0) { + return; + } + + stopped = false; + } + + public void stop() { + if (frames.size() == 0) { + return; + } + + stopped = true; + } + + public void restart() { + if (frames.size() == 0) { + return; + } + + stopped = false; + currentFrame = 0; + } + + public void reset() { + this.stopped = true; + this.frameCount = 0; + this.currentFrame = 0; + } + + private void addFrame(BufferedImage frame, int duration) { + if (duration <= 0) { + System.err.println("Invalid duration: " + duration); + throw new RuntimeException("Invalid duration: " + duration); + } + + frames.add(new Frame(frame, duration)); + currentFrame = 0; + } + + public BufferedImage getSprite() { + return frames.get(currentFrame).getFrame(); + } + + public void update() { + if (!stopped) { + frameCount++; + + if (frameCount > frameDelay) { + frameCount = 0; + currentFrame += animationDirection; + + if (currentFrame > totalFrames - 1) { + currentFrame = 0; + } + else if (currentFrame < 0) { + currentFrame = totalFrames - 1; + } + } + } + + } + +} \ No newline at end of file diff --git a/MerchantRPGCSE2102/src/sprites/Frame.java b/MerchantRPGCSE2102/src/sprites/Frame.java new file mode 100644 index 0000000..eebca6a --- /dev/null +++ b/MerchantRPGCSE2102/src/sprites/Frame.java @@ -0,0 +1,29 @@ +import java.awt.image.BufferedImage; + +public class Frame { + + private BufferedImage frame; + private int duration; + + public Frame(BufferedImage frame, int duration) { + this.frame = frame; + this.duration = duration; + } + + public BufferedImage getFrame() { + return frame; + } + + public void setFrame(BufferedImage frame) { + this.frame = frame; + } + + public int getDuration() { + return duration; + } + + public void setDuration(int duration) { + this.duration = duration; + } + +} \ No newline at end of file diff --git a/MerchantRPGCSE2102/src/sprites/PlayerSprite.java b/MerchantRPGCSE2102/src/sprites/PlayerSprite.java index 220e65a..3c20c36 100644 --- a/MerchantRPGCSE2102/src/sprites/PlayerSprite.java +++ b/MerchantRPGCSE2102/src/sprites/PlayerSprite.java @@ -4,6 +4,8 @@ import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.event.KeyEvent; +import java.awt.image.BufferedImage; + import view.MapUI; public class PlayerSprite { @@ -21,6 +23,23 @@ public class PlayerSprite { private boolean rightBeingPressed = false; private boolean downBeingPressed = false; private boolean upBeingPressed = false; + + // Images for each animation + private BufferedImage[] walkingLeft = {Sprite.getSprite(0, 1), Sprite.getSprite(2, 1)}; // Gets the upper left images of my sprite sheet + private BufferedImage[] walkingRight = {Sprite.getSprite(0, 2), Sprite.getSprite(2, 1)}; + private BufferedImage[] walkingUp = {Sprite.getSprite(0, 1), Sprite.getSprite(2, 1)}; // Gets the upper left images of my sprite sheet + private BufferedImage[] walkingDown = {Sprite.getSprite(0, 2), Sprite.getSprite(2, 1)}; + private BufferedImage[] standing = {Sprite.getSprite(1, 0)}; + + // Animation states + private Animation walkLeft = new Animation(walkingLeft, 10); + private Animation walkRight = new Animation(walkingRight, 10); + private Animation walkUp = new Animation(walkingUp, 10); + private Animation walkDown = new Animation(walkingDown, 10); + private Animation standing1 = new Animation(standing, 10); + + // Actual animation + private Animation animation = standing1; public PlayerSprite(MapUI mapui, int row, int col) { this.x = col*WIDTH; @@ -35,19 +54,27 @@ public PlayerSprite(MapUI mapui, int row, int col) { public void keyPressed(KeyEvent e) { if (e.getKeyCode() == KeyEvent.VK_LEFT) { dx = -1; + animation = walkLeft; + animation.start(); leftBeingPressed = true; } if (e.getKeyCode() == KeyEvent.VK_RIGHT) { dx = 1; + animation = walkRight; + animation.start(); rightBeingPressed = true; } if (e.getKeyCode() == KeyEvent.VK_UP) { dy = -1; + animation = walkUp; + animation.start(); upBeingPressed = true; } if (e.getKeyCode() == KeyEvent.VK_DOWN) { dy = 1; + animation = walkDown; + animation.start(); downBeingPressed = true; } } @@ -171,6 +198,7 @@ public void move() { public void paint(Graphics2D g) { g.setColor(color); g.fillOval(getX(), getY(), WIDTH, WIDTH); + g.drawImage(animation.getSprite(), x, y, null); } /** diff --git a/MerchantRPGCSE2102/src/sprites/Sprite.java b/MerchantRPGCSE2102/src/sprites/Sprite.java new file mode 100644 index 0000000..81711fa --- /dev/null +++ b/MerchantRPGCSE2102/src/sprites/Sprite.java @@ -0,0 +1,36 @@ +package sprites; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; + +import javax.imageio.ImageIO; + +public class Sprite { + + private static BufferedImage spriteSheet; + private static final int TILE_SIZE = 32; + + public static BufferedImage loadSprite(String file) { + + BufferedImage sprite = null; + + try { + sprite = ImageIO.read(new File("src/images/testsprite.png")); + } catch (IOException e) { + e.printStackTrace(); + } + + return sprite; + } + + public static BufferedImage getSprite(int xGrid, int yGrid) { + + if (spriteSheet == null) { + spriteSheet = loadSprite("AnimationSpriteSheet"); + } + + return spriteSheet.getSubimage(xGrid * TILE_SIZE, yGrid * TILE_SIZE, TILE_SIZE, TILE_SIZE); + } + +} \ No newline at end of file