Подтвердить что ты не робот

Как установить фоновое изображение в Java?

Я разрабатываю простую платформенную игру, используя Java, используя BlueJ как IDE. Сейчас у меня есть игровые/вражеские спрайты, платформы и другие предметы в игре, нарисованные с использованием полигонов и простых фигур. В конце концов я надеюсь заменить их фактическими изображениями.

На данный момент я хотел бы знать, что является самым простым решением для установки изображения (URL-адреса или из локального источника) в качестве "фона" моего игрового окна/холста?

Буду признателен, если это не что-то длинное или сложное, так как мои навыки программирования не очень хорошие, и я хочу, чтобы моя программа была как можно более простой. Просьба предоставить примеры кодов с комментариями, чтобы подробно описать их функцию, а также, если она в своем классе, как вызвать соответствующие методы, используемые им для других классов.

Большое спасибо.

4b9b3361

Ответ 1

Ответ будет немного отличаться в зависимости от того, использует ли приложение или апплет AWT или Swing.

(В принципе, классы, начинающиеся с J, такие как JApplet и JFrame, являются Swing, а Applet и Frame являются AWT.)

В любом случае основными шагами будут:

  • Нарисуйте или загрузите изображение в объект Image.
  • Нарисуйте фоновое изображение в событии рисования Component, на котором вы хотите нарисовать фон.

Шаг 1. Загрузка изображения может быть либо с помощью класса Toolkit, либо с помощью ImageIO.

Метод Toolkit.createImage может использоваться для загрузки Image из местоположения, указанного в String:

Image img = Toolkit.getDefaultToolkit().createImage("background.jpg");

Аналогично, можно использовать ImageIO:

Image img = ImageIO.read(new File("background.jpg");

Шаг 2. Метод рисования для Component, который должен получить фон, должен быть переопределен и нарисовать Image на компоненте.

Для AWT метод переопределения - это метод paint и используйте drawImage метода Graphics, который передается методу paint:

public void paint(Graphics g)
{
    // Draw the previously loaded image to Component.
    g.drawImage(img, 0, 0, null);

    // Draw sprites, and other things.
    // ....
}

Для Swing метод переопределения - это метод paintComponent JComponent и нарисуйте Image как с тем, что было сделано в AWT.

public void paintComponent(Graphics g)
{
    // Draw the previously loaded image to Component.
    g.drawImage(img, 0, 0, null);

    // Draw sprites, and other things.
    // ....
}

Пример простого компонента

Здесь Panel, который загружает файл изображения при создании экземпляра и рисует это изображение сам по себе:

class BackgroundPanel extends Panel
{
    // The Image to store the background image in.
    Image img;
    public BackgroundPanel()
    {
        // Loads the background image and stores in img object.
        img = Toolkit.getDefaultToolkit().createImage("background.jpg");
    }

    public void paint(Graphics g)
    {
        // Draws the img to the BackgroundPanel.
        g.drawImage(img, 0, 0, null);
    }
}

Для получения дополнительной информации о живописи:

Ответ 2

Сначала создайте новый класс, который расширяет класс 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();. Также убедитесь, что вы используете фоновое изображение, которое не слишком велико!

Теперь, когда это! Ive заметил, что игровые движки могут обрабатывать форматы изображений JPEG и PNG, но также могут поддерживать других. Хотя это помогает включить фоновое изображение в вашу игру, оно не идеально! Потому что как только вы переходите на следующий уровень, все ваши платформы и спрайты невидимы, и вы можете видеть только ваше фоновое изображение и любые JLabels/Jbuttons, которые вы включили в игру.

Ответ 3

Или попробуйте это;)

try {
  this.setContentPane(
    new JLabel(new ImageIcon(ImageIO.read(new File("your_file.jpeg")))));
} catch (IOException e) {};

Ответ 4

<script>
function SetBack(dir) {
    document.getElementById('body').style.backgroundImage=dir;
}
SetBack('url(myniftybg.gif)');
</script>

Ответ 5

Путь - это единственное, о чем вам действительно нужно беспокоиться, если вы действительно новичок в Java. Вам нужно перетащить изображение в основной файл проекта, и он будет отображаться в самом низу списка.

Затем путь к файлу довольно прост. Этот код входит в конструктор для класса.

    img = Toolkit.getDefaultToolkit().createImage("/home/ben/workspace/CS2/Background.jpg");

CS2 - это имя моего проекта, и все, что до этого приводит к рабочей области.