Bom eu sou novato em prog e estou fazendo o curso da danki code, fazendo esse curso cheguei em uma parte onde eles ensinam a fazer uma “copia” do jogo pong, e estou com um erro de fazer o meu personagem se mover!!
package pack;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import javax.swing.JFrame;
public class Game extends Canvas implements Runnable, KeyListener {
private static final long serialVersionUID = 1L;
public static int WIDTH = 240;
public static int HEIGHT = 140;
public static int SCALE = 4;
public Player player;
public BufferedImage layer = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
public Game() {
this.setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
this.addKeyListener(this);
player = new Player(100, HEIGHT - 10);
}
public void tick() {
player.tick();
// ao final de cada tick, reseta o movimento, senão ele não pára de se mover
player.right = false;
player.left = false;
}
public void render() {
BufferStrategy bs = this.getBufferStrategy();
if (bs == null) {
this.createBufferStrategy(3);
return;
}
Graphics g = layer.getGraphics();
// limpar a tela
g.setColor(Color.BLACK);
g.fillRect(0, 0, WIDTH * SCALE, HEIGHT * SCALE);
// renderizar jogador
player.render(g);
g = bs.getDrawGraphics();
g.drawImage(layer, 0, 0, WIDTH * SCALE, HEIGHT * SCALE, null);
bs.show();
}
public static void main(String[] args) {
Game game = new Game();
JFrame frame = new JFrame("Pong do manel");
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(game);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
new Thread(game).start();
}
@Override
public void run() {
while (true) {
requestFocus(); // focar o canvas pra receber entrada do teclado
tick();
render();
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_RIGHT:
player.right = true;
System.out.println("Pressed RIGHT");
break;
case KeyEvent.VK_LEFT:
player.left = true;
System.out.println("Pressed LEFT");
break;
}
}
@Override
public void keyReleased(KeyEvent e) {}
@Override
public void keyTyped(KeyEvent e) {}
}
Classe Player:
package pack;
import java.awt.Color;
import java.awt.Graphics;
public class Player {
public boolean right, left;
public int x, y;
public Player(int x, int y) {
this.x = x;
this.y = y;
}
public void tick() {
if (right) {
x++;
}
if (left) {
x--;
}
}
public void render(Graphics g) {
g.setColor(Color.BLUE);
g.fillRect(x, y, 40, 10);
}
}