Java - Добавление изображений в полноэкранном режиме (Пример разработки игр на Java - книга) - PullRequest
2 голосов
/ 15 ноября 2011

Я пытаюсь следовать книге под названием «Разработка игр на Java», написанной Дэвидом Брэкнином. В главе 2 приведен пример добавления изображений в полноэкранное приложение. Он добавляет фоновое изображение JPG, а затем 4 изображения PNG. Я пытался сделать это, как всегда, написав код самостоятельно, глядя на книгу. Это не сработало.

Я искал ошибки в коде, изменил некоторые вещи, попробовал разные, но это не сработало. Затем я попытался использовать его собственный код, который я скачал с его сайта. Это тоже не сработало ... Я пытался найти другой способ добавить изображение, и теперь я искал все утро ... Кажется, я не могу найти способ внедрить изображения любым другим способом в этот класс это написано в этой книге .. Мой уровень программирования на Java просто недостаточно высок.

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

import java.awt.*;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class ImageTest extends JFrame
{
public static void main(String[] args)
{
    DisplayMode displayMode;

    if (args.length == 3)
    {
        displayMode = new DisplayMode(
            Integer.parseInt(args[0]),
            Integer.parseInt(args[1]),
            Integer.parseInt(args[2]),
            DisplayMode.REFRESH_RATE_UNKNOWN);
    }
    else
    {
        displayMode = new DisplayMode(800, 600, 16, DisplayMode.REFRESH_RATE_UNKNOWN);
    }

    ImageTest test = new ImageTest();
    test.run(displayMode);
}

private static final int FONT_SIZE = 24;
private static final long DEMO_TIME = 10000;

private SimpleScreenManager screen;
private Image bgImage;
private Image opaqueImage;
private Image transparentImage;
private Image translucentImage;
private Image antiAliasedImage;
private boolean imagesLoaded;

public void run(DisplayMode displayMode)
{
    setBackground(Color.blue);
    setForeground(Color.white);
    setFont(new Font("Dialog", Font.PLAIN, FONT_SIZE));
    imagesLoaded = false;

    screen = new SimpleScreenManager();

    try
    {
        screen.setFullScreen(displayMode, this);
        loadImages();
        try
        {
            Thread.sleep(DEMO_TIME);
        }
        catch (InterruptedException ex){}
    }
    finally
    {
        screen.restoreScreen();
    }
}


public void loadImages()
{
    bgImage = loadImage("images/background.jpg");
    opaqueImage = loadImage("images/opaque.png");
    transparentImage = loadImage("images/transparent.png");
    translucentImage = loadImage("images/translucent.png");
    antiAliasedImage = loadImage("images/antialiased.png");
    imagesLoaded = true;
    // signal to AWT to repaint this window
    repaint();
}


private Image loadImage(String fileName)
{
    return new ImageIcon(fileName).getImage();
}


public void paint(Graphics g)
{
    // set text anti-aliasing
    if (g instanceof Graphics2D)
    {
        Graphics2D g2 = (Graphics2D)g;
        g2.setRenderingHint(
            RenderingHints.KEY_TEXT_ANTIALIASING,
            RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
    }

    // draw images
    if (imagesLoaded)
    {
        g.drawImage(bgImage, 0, 0, null);
        drawImage(g, opaqueImage, 0, 0, "Opaque");
        drawImage(g, transparentImage, 320, 0, "Transparent");
        drawImage(g, translucentImage, 0, 300, "Translucent");
        drawImage(g, antiAliasedImage, 320, 300, "Translucent (Anti-Aliased)");
    }
    else
    {
        g.drawString("Loading Images...", 5, FONT_SIZE);
    }
}


public void drawImage(Graphics g, Image image, int x, int y, String caption)
{
    g.drawImage(image, x, y, null);
    g.drawString(caption, x + 5, y + FONT_SIZE + image.getHeight(null));
}

}

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Глядя на это ... Я не вижу ничего, что делает JFrame видимым.

Хочу добавить "setVisible (true);"перед "screen.setFullScreen (displayMode, this);"в строке 48?

Если это не сработает - можете ли вы подтвердить, что используете этот SimpleScreenManager?http://www.it.uu.se/edu/course/homepage/games/JavaIntro/SimpleScreenManager.java

0 голосов
/ 03 декабря 2012

Благодаря модератору на форумах Java я понял, что проблема в пути к изображениям. Когда я добавил полный путь вместо того, чтобы использовать только «folderName / imageName», это работало. Странно, но теперь это работает!

...