Сначала создайте новый класс, который расширяет класс WorldView
. Я позвонил своему новому классу Background
. Таким образом, в этом новом классе импортируйте все пакеты Java, которые вам понадобятся для переопределения метода paintBackground
. Это должно быть:
import city.soi.platform.*;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.ImageObserver;
import javax.swing.ImageIcon;
import java.awt.geom.AffineTransform;
Затем, после имени класса, убедитесь, что оно говорит: extends WorldView
. Примерно так:
public class Background extends WorldView
Затем объявите игру переменных типа Game
и переменную изображения типа Image
примерно так:
private Game game;
private Image image;
Затем в конструкторе этого класса убедитесь, что игра типа Game
находится в сигнатуре конструктора и что при вызове super
вам придется инициализировать WorldView
, инициализировать игру и инициализировать переменные изображения, что-то вроде этого:
super(game.getCurrentLevel().getWorld(), game.getWidth(), game.getHeight());
this.game = game;
bg = (new ImageIcon("lol.png")).getImage();
Затем вы просто переопределяете метод paintBackground
точно так же, как при переопределении метода paint
в классе Player
. Просто так:
public void paintBackground(Graphics2D g)
{
float x = getX();
float y = getY();
AffineTransform transform = AffineTransform.getTranslateInstance(x,y);
g.drawImage(bg, transform, game.getView());
}
Теперь, наконец, вы должны объявить ссылку на уровне класса на новый класс, который вы только что создали в классе Game
, и инициализировать его в конструкторе Game
, что-то вроде этого:
private Background image;
And in the Game constructor:
image = new Background(this);
Наконец, все, что вам нужно сделать, это добавить фон в рамку! Это то, что я уверен, что мы все пропали. Для этого нужно сделать что-то подобное после объявления переменной frame
:
frame.add(image);
Убедитесь, что вы добавили этот код непосредственно перед frame.pack();
.
Также убедитесь, что вы используете не слишком большое фоновое изображение!
Вот и все! Я заметил, что игровые движки могут работать с форматами изображений JPEG и PNG, но также могут поддерживать и другие. Хотя это помогает включить фоновое изображение в вашу игру, оно не идеально! Потому что, как только вы переходите на следующий уровень, все ваши платформы и спрайты становятся невидимыми, и все, что вы можете видеть, это фоновое изображение и любые JLabels / Jbutton, которые вы включили в игру.