Ok I did that, and now hes moving way fast. Im going to post all of the code and maybe you guys can take a look at it? I understand everything well except for the run method. I dont understand exactly what I should be doing.
Im posting 3 classes and an Interface
import java.awt.Image;
import java.awt.Rectangle;
public interface Entity {
public void move(long timeDiff);
public void update(long timeDiff);
public Image getImage();
public int getXPosition();
public int getYPosition();
public boolean isVisible();
public Rectangle getBounds();
}
import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
public class Player implements Entity {
private String player = "player.png";
//x and y positions for the player
private int xPosition;
private int yPosition;
//x and y speeds for the player
private int xSpeed;
private int ySpeed;
//width and height of the player
private int width;
private int height;
private Image image;
private boolean wPressed;
private boolean sPressed;
private boolean aPressed;
private boolean dPressed;
private boolean visible;
public Player() {
ImageIcon playerIcon = new ImageIcon(this.getClass().getResource(player));
image = playerIcon.getImage();
//setting the players dimensions
width = image.getWidth(null);
height = image.getHeight(null);
//setting the initial player position and speed
xPosition = 0;
yPosition = MainFrame.gameWindowHeight - 100;
xSpeed = 1;
ySpeed = 1;
//setting visible
visible = true;
}
@Override
public void move(long timeDiff) {
if(dPressed) {
xPosition = xPosition + (int)(xSpeed * timeDiff);
}
if(aPressed) {
xPosition = xPosition - (int) (xSpeed * timeDiff);
}
if(wPressed) {
for(int j = 0; j < 50; j++) {
if(j <= 25) yPosition += 1;//you'll go up when the jump is under halfway done
if(j >= 25) yPosition -= 1;//you'll go down when the jump is over halfway done
}
}
}
@Override
public void update(long timeDiff) {
move(timeDiff);
}
@Override
public Image getImage() {
// TODO Auto-generated method stub
return image;
}
@Override
public int getXPosition() {
// TODO Auto-generated method stub
return xPosition;
}
@Override
public int getYPosition() {
// TODO Auto-generated method stub
return yPosition;
}
@Override
public boolean isVisible() {
// TODO Auto-generated method stub
return visible;
}
@Override
public Rectangle getBounds() {
// TODO Auto-generated method stub
return new Rectangle(getXPosition(), getYPosition(), width, height);
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_W) {
wPressed = true;
}
if(key == KeyEvent.VK_S) {
sPressed = true;
}
if(key == KeyEvent.VK_A) {
aPressed = true;
}
if(key == KeyEvent.VK_D) {
dPressed = true;
}
}
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if(key == KeyEvent.VK_W) {
wPressed = false;
}
if(key == KeyEvent.VK_S) {
sPressed = false;
}
if(key == KeyEvent.VK_A) {
aPressed = false;
}
if(key == KeyEvent.VK_D) {
dPressed = false;
}
}
}
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JPanel;
public class GamePanel extends JPanel implements Runnable {
private Thread animator;
private Player player;
private final int DELAY = 50;
public GamePanel() {
addKeyListener(new KAdapter());
setFocusable(true);
setBackground(Color.black);
setDoubleBuffered(true);
player = new Player();
}
@Override
public void run() {
long beforeTime = 0, timeDiff, sleep;
while(true) {
timeDiff = System.currentTimeMillis() - beforeTime;
beforeTime = System.currentTimeMillis();
player.update(timeDiff);
repaint();
sleep = DELAY - timeDiff;
if (sleep < 0)
sleep = 2;
try {
Thread.sleep(sleep);
} catch (InterruptedException e) {
System.out.println("interrupted");
}
}
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2 = (Graphics2D)g;
if(player.isVisible()) {
g2.drawImage(player.getImage(), player.getXPosition(), player.getYPosition(), this);
}
Toolkit.getDefaultToolkit().sync();
g.dispose();
}
private class KAdapter extends KeyAdapter {
public void keyReleased(KeyEvent e) {
player.keyReleased(e);
}
public void keyPressed(KeyEvent e) {
player.keyPressed(e);
}
}
public void addNotify() {
super.addNotify();
animator = new Thread(this);
animator.start();
}
}
import javax.swing.JFrame;
public class MainFrame extends JFrame {
private static final long serialVersionUID = -628360966210671157L;
//using these to tell anyone the dimensions of the window
protected static int gameWindowWidth = 640;
protected static int gameWindowHeight = 480;
public MainFrame() {
add(new GamePanel());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(gameWindowWidth, gameWindowHeight);
setLocationRelativeTo(null);
setTitle("...");
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
new MainFrame();
}
}
Hopefully one of you can run this and tell me where Im going wrong