мультиклассовая краска java - PullRequest
0 голосов
/ 14 апреля 2011

Я работаю в проекте с графикой, где до сих пор у меня есть 2 разных класса с графикой в ​​каждом. В обоих классах вызывается метод paint(Graphics g), но когда я его выполняю, оба JFrames мерцают.

Мой вопрос: правильно ли называть всю графику проекта в одном классе или требуются новые потоки для каждого класса?

Заранее спасибо.


Фрагменты кода

public void paint(Graphics g) 
{ 
    repaint(); 
    mapLimits();
    moveEnemy();
    g.drawImage(background, 0,0, null); // draw background 
    drawImage(g, myHero, heroXposition, heroYposition, "name"); // draw hero 
    repaint(); 
}

и для класса инвентаря метод рисования выглядит следующим образом

public void paint(Graphics g) 
{ 
    g.drawImage(background, 0,0,null); //background 
    repaint(); 
} 

и оба они называются в основном классе

Hero hero = new Hero(); 
hero.setVisible(true); 
Inventory inv = new Inventory(); 
inv.setVisible();

1 Ответ

2 голосов
/ 14 апреля 2011

Ответ не имеет ничего общего с Thread (точнее, перебрасывание потоков при этом не решит проблем, которые уже есть в коде).Все сводится к пользовательскому рисованию и правильному выполнению.

Подробнее см. Урок Выполнение пользовательского рисования в руководстве по Java.

Вот некоторые общие советы:

  • Никогда не переопределять paint(Graphics) в контейнере верхнего уровня.В ту минуту, когда вы это сделаете, вы обнаружите, что пользовательский рендеринг может быть лучше показан в JDialog, JInternalFrame (и т. Д.), А не в том виде, в котором вы его закодировали.JPanel.Первый - для полностью нестандартной окраски, второй - для сочетания нестандартной окраски с другими компонентами.В любом из этих классов переопределите paintComponent(Graphics) вместо paint(Graphics).
  • Используйте общую номенклатуру для имен классов и методов.Классы EachWordUpperCase, методы и атрибуты firstWordLowerCase, константы ALL_UPPER_CASE.Это особенно важно, если кто-то, кроме вас, когда-либо будет читать код.Другие программисты используют регистр имен, чтобы дать подсказки относительно их природы / источника.
  • Не звоните repaint() изнутри paint(Graphics) или paintComponent(Graphics).
...