But I have a new problem. I’m trying to make a new game, and when I press left, my character won’t face left. He just faces right(His default is facing right).
Is their a way to fix it so that when I press the right key, he faces right and when I press the left key, he faces left?
Here are the source codes
Animation
import java.awt.*;
import java.util.ArrayList;
public class Animation {
public ArrayList<Frame> frames;
public int f = 0;
public long currentTime;
public long totalTime;
public Animation() {
frames = new ArrayList();
totalTime = 0;
start();
}
public synchronized void addFrame(Image i, long t) {
totalTime += t;
frames.add(new Frame(i, totalTime));
}
public synchronized void start() {
currentTime = 0;
f = 0;
}
public synchronized void update(long time) {
if (frames.size() > 1) {
currentTime += time;
if (currentTime >= totalTime) {
currentTime = 0;
f = 0;
}
while (currentTime > frames.get(f).time) {
f++;
System.out.println("next frame");
}
}
//System.out.println(time);
}
public synchronized Image getImage() {
if (frames.isEmpty()) {
return null;
} else {
return frames.get(f).img;
}
}
public class Frame {
public Image img;
public long time;
public Frame(Image i, long t) {
img = i;
time = t;
}
}
}
ExtremeMario
import javax.swing.JFrame;
public class ExtremeMario {
public ExtremeMario() {
JFrame f = new JFrame();
f.setTitle("ExtremeMario");
f.add(new MainConfig());
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(500, 500);
f.setVisible(true);
}
public static void main(String[] args) {
new ExtremeMario();
}
}
MainConfig
import extrememario.mario.*;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class MainConfig extends JPanel implements Runnable {
public Mario mario;
public Thread mainLoop;
public MainConfig() {
mario = new Mario();
this.addKeyListener(new KL());
}
@Override
public void addNotify() {
super.addNotify();
mainLoop = new Thread(this);
mainLoop.start();
}
@Override
public void run() {
long lastTime = System.currentTimeMillis();
while (true) {
long nowTime = System.currentTimeMillis();
long timePassed = nowTime - lastTime;
lastTime = nowTime;
mario.sprite().update(timePassed);
repaint();
try {
Thread.sleep(10);
} catch (Exception e) {
}
}
}
public Image bg = new ImageIcon(this.getClass().getResource("/extrememario/BackgroundDemoStage.png")).getImage();
@Override
public void paint(Graphics g) {
g.drawImage(bg, 0, 0, null);
g.drawImage(mario.getFrame(), 250, 250, null);
g.dispose();
}
public class KL implements KeyListener {
@Override
public void keyPressed(KeyEvent e) {
mario.keyPressed(e);
}
@Override
public void keyReleased(KeyEvent e) {
mario.keyReleased(e);
}
@Override
public void keyTyped(KeyEvent e) {
}
}
}
Sprite
import java.awt.Image;
public class Sprite {
public int x, y;
public Animation a;
public Sprite(Animation anim) {
a = anim;
}
public void update(long time) {
a.update(time);
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getWidth() {
return a.getImage().getWidth(null);
}
public int getHieght() {
return a.getImage().getHeight(null);
}
public Image getImage() {
return a.getImage();
}
}
Mario
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
/**
*
* @author ben
*/
public class Mario extends MarioSprites implements KeyListener {
public Mario() {
idleRight();
}
public boolean ap;//stands for already pressed
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_RIGHT) {
idleRight();
} else if (keyCode == KeyEvent.VK_LEFT) {
idleLeft();
}
}
@Override
public void keyReleased(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_RIGHT) {
idleRight();
} else if (keyCode == KeyEvent.VK_LEFT) {
idleLeft();
}
}
@Override
public void keyTyped(KeyEvent e) {
}
}
MarioSprites
import extrememario.Animation;
import extrememario.Sprite;
import java.awt.Image;
import javax.swing.ImageIcon;
public class MarioSprites {
public Animation idleAnimRight;
public Sprite currentSprite;
public void idleRight() {
idleAnimRight = new Animation();
Image f1 = new ImageIcon(this.getClass().getResource("/extrememario/mario/sprites/IRFrame0.png")).getImage();
Image f2 = new ImageIcon(this.getClass().getResource("/extrememario/mario/sprites/IRFrame1.png")).getImage();
Image f3 = new ImageIcon(this.getClass().getResource("/extrememario/mario/sprites/IRFrame2.png")).getImage();
Image f4 = new ImageIcon(this.getClass().getResource("/extrememario/mario/sprites/IRFrame3.png")).getImage();
Image f5 = new ImageIcon(this.getClass().getResource("/extrememario/mario/sprites/IRFrame4.png")).getImage();
idleAnimRight.addFrame(f1, 110);
idleAnimRight.addFrame(f2, 110);
idleAnimRight.addFrame(f3, 110);
idleAnimRight.addFrame(f4, 110);
idleAnimRight.addFrame(f5, 110);
currentSprite = new Sprite(idleAnimRight);
}
public Animation idleAnimLeft;
public void idleLeft() {
idleAnimRight = new Animation();
Image f1 = new ImageIcon(this.getClass().getResource("/extrememario/mario/sprites/ILeft1.png")).getImage();
Image f2 = new ImageIcon(this.getClass().getResource("/extrememario/mario/sprites/ILeft2.png")).getImage();
Image f3 = new ImageIcon(this.getClass().getResource("/extrememario/mario/sprites/ILeft3.png")).getImage();
Image f4 = new ImageIcon(this.getClass().getResource("/extrememario/mario/sprites/ILeft4.png")).getImage();
Image f5 = new ImageIcon(this.getClass().getResource("/extrememario/mario/sprites/ILeft5.png")).getImage();
idleAnimLeft.addFrame(f1, 110);
idleAnimLeft.addFrame(f2, 110);
idleAnimLeft.addFrame(f3, 110);
idleAnimLeft.addFrame(f4, 110);
idleAnimLeft.addFrame(f5, 110);
currentSprite = new Sprite(idleAnimLeft);
}
public Sprite sprite() {
return currentSprite;
}
public Image getFrame() {
return currentSprite.getImage();
}
}