Есть ли способ рисовать вне метода applet's paint ()? - PullRequest
1 голос
/ 30 января 2012

У меня есть апплет, который я пытаюсь нарисовать, но я хочу сделать это вне метода paint () апплета.В настоящее время у меня есть класс Entity, который принимает имя файла и координаты экрана в качестве аргументов.Конструктор делает вызов класса Sprite, который обрабатывает загрузку ресурсов и тому подобное.

Итак, у меня есть класс с именем MainMenuState, который изначально должен был обрабатывать ввод с клавиатуры для главного меню моего апплета (яработая над 2D-игрой), но я понял, что было бы лучше добавить туда и код для рисования.То, что я хочу сделать, это нарисовать фон главного меню при построении состояния главного меню.Вот что у меня есть:

Game.java (расширяет апплет)

public void init() {
    this.setSize(500, 500);

    // New games have the MainMenuState by default because the game starts at the main menu.
    setState(new MainMenuState(this));

    Entity background = new Entity("../Assets/Menus/titleScreen.png", 0, 0);
    background.draw(this.getGraphics());

}

MainMenuState.java (расширяет абстрактный класс State)

public MainMenuState(Game game) {
    super(game);
    Graphics g = game.getGraphics();
    Entity background = new Entity("../Assets/Menus/titleScreen.png", 0, 0);
    background.draw(g);
}

Апплет работаети все методы рисования вызываются правильно, но апплет никогда не рисует изображение на экране.В настоящее время метод paint () моего апплета пуст.Как я могу рисовать изображения на экране вне метода paint () апплета?

Спасибо.

Обновление: Хорошо.Я изменил свой класс MainMenuState так, чтобы он вызывал метод draw () фона, используя графический контекст внеэкранного буфера, который я затем рисую на экране.Это работает, но у меня мерцает всякий раз, когда я изменяю размер окна.

Game.java

public void init() {
    this.setSize(500, 500);

    offScreen = new BufferedImage(500, 500, BufferedImage.TYPE_INT_ARGB);
    graphics = offScreen.getGraphics();

    // New games have the MainMenuState by default because the game starts at the main menu.
    setState(new MainMenuState(this));
}

public void paint(Graphics g) {
    g.drawImage(offScreen, 0, 0, this);
}

public void update(Graphics g) {
    paint(g);
}

MainMenuState.java - то же самое, за исключением этого: background.draw(game.getOffScreenGraphics());

Обновление2: конечно, апплеты всегда мерцают, когда они изменяют размер?Это могло бы быть.

1 Ответ

1 голос
/ 30 января 2012

Никогда не используйте getGraphics(), так как полученный объект Graphics никогда не будет сохраняться.Я предлагаю вам нарисовать BufferedImage, если вы хотите нарисовать «вне рисования», а затем нарисовать это изображение внутри метода paint, когда вы хотите отобразить его.Чтобы отобразить что-то, оно должно быть нарисовано в методе рисования, точка.

...