Я пытаюсь реализовать функцию камеры для игры, чтобы на данный момент расширить игровое поле для игрока по горизонтали. Я делал класс камеры только один раз, но проблема, с которой я всегда сталкиваюсь, это либо работа с позициями камеры, но translate () в Graphics ничего не делает, либо игрок не может двигаться. Я пробовал несколько разных решений и предложений, но не могу понять, в чем проблема. Вот самый основной код:
public class GamePanel extends JPanel implements ActionListener
{
public GamePanel()
{
setBackground(Color.WHITE);
setLayout(null);
setOpaque(false);
cell = new WBCell();
addKeyListener(cell);
camera = new Camera(cell);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
grabFocus();
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
g.setColor(Color.black);
g.fillRect(0, 0, getWidth(), getHeight());
g.translate(camera.getX(), camera.getY());
g2.drawImage(cell.getImage(), cell.getX(), cell.getY(), null);
g.translate(-camera.getX(), -camera.getY());
}
public void actionPerformed(ActionEvent e) {
Game.getCards().show(Game.getCardP(), "Start");
}
Базовый код для камеры, чтобы держать плеер в центре экрана:
public class Camera
{
private WBCell player;
private int x = 0, y = 0;
public Camera(WBCell wCell)
{
player = wCell;
}
public void cameraMove()
{
System.out.println("Cam: " + x + ", " + y + "\t\t" + (-player.getX() + Game.WIDTH/2) + ", " + (-player.getY() + Game.HEIGHT/2));
x = -player.getX() + Game.WIDTH/2;
y = -player.getY() + Game.HEIGHT/2;
}
public int getX()
{
return x;
}
public int getY()
{
return y;
}
}
Для справки: объект ячейки или класс WBCell просто загружает BufferedImage и удаляет его на панели после вызова drawImage (). Любые предложения будут с благодарностью!