В качестве учебного пособия для школы нам приходилось разрабатывать самоопределяемый проект, в котором я выбрал игру, которую я изначально собирался писать на ActionScript, но решил нажать на нее на Java , Первоначально это происходило хорошо, при работе кода игры анимация спрайтов обрабатывалась отлично, и все поддерживалось в игровом цикле. Это было до тех пор, пока я не начал пытаться добавлять к нему такие компоненты, как кнопки и ярлыки.Панели/Кнопки и перекрашивание головной боли
В настоящее время структура моей игры такова (GameSystem [обрабатывает цикл и перерисовку]] - GameMenu [Простой вводный экран с началом игры] < --- свопы между ---> GameContainer [содержит информацию об игре])
Моя петля внутри GameSystem обновляет все необходимые объекты, перекрашивает и затем сообщает обо всем объектам, которые будут перерисовываться после.
игровой системы:
/**/for(int i = 0; i < UpdateList.size();i++){
/**/UpdateList.get(i).Update(delta * 1.1); // tell list the element is an object that extends an interface
/**/}
/**/Game.repaint();
/**/@Override
/**/public void paint(Graphics g) {
/**/super.paint(g);
/**/Graphics2D g2d = (Graphics2D) g;
/**/g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
/**/ RenderingHints.VALUE_ANTIALIAS_ON);
/**/for(int i = 0; i < UpdateList.size();i++){
/**/UpdateList.get(i).paint(g2d); // tell list the element is an object that extends an interface
/**/}
/**/}
Это где он начинает получать ненадежный, потому что система игры перерисовывает это сам каждый цикл, очищая кадр предыдущего материала, кнопки, которые я добавить в мой gamemenu, который создается внутри игровой системы очищаются и только кратковременно появляются, когда вы наводите на них курсор.
Game Menu:
//////////////////
// Start Button //
//////////////////
Buttons = new JPanel();
Buttons.add(Start_game = new JButton("Start Game"));
this.add(Buttons);
Start_game.addActionListener(new Load());
/**/}
///////////////////
//////////////////
//Paint sprite //
//////////////////
@Override
/**/public void paintComponent(Graphics g) {
/**///super.paintComponent(g);
/**/Buttons.paintComponents(g);
/**/}
////////////////////////////////////
На данный момент я пробовал краски, краски компоненты, перепроверить() и множество других вещей, я блестел от других постов, но ни один из них помогли. Единственный способ, которым у меня была кнопка, выглядела видимой, - если я удалю вызов, чтобы перерисовать в игровом цикле. Однако это влияет на игру, поскольку ни один из объектов не перекрашивается.
TL DR: Как я могу обработать перекраску различных объектов в моем списке обновлений и обновить панель «Игровая система» без каких-либо компонентов, которые такие кнопки исчезнут? Извините, если это вопрос noobish, но это мой фактический первый раз, когда я работаю с Java, поскольку я хотел бы расширить внешний вид от ActionScript, если вам нужна дополнительная информация, я с радостью добавлю сообщение, спасибо за вашу помощь.
1) Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). 2) Пожалуйста, не забудьте добавить '?' на вопросы! Некоторые люди выполняют поиск на странице «?» и если ни один из них не существует в «вопросе», переходите непосредственно к следующему (фактическому) вопросу в очереди. –
Также кажется, что вы расширяете 'JFrame' и переопределяете метод' paint (..) '? Если это так, не делайте этого. Расширьте 'JPanel' для пользовательской картины, переопределите' paintComponent (..) 'вместо краски и верните предпочтительный размер по мере необходимости для этого компонента. –
Извините, что забыли вопросительный знак, который действительно имеет смысл, поскольку я спрашиваю его.также в случае с JFrames, я изначально распространял их до тех пор, пока не возникли проблемы, и я их поменял, поэтому если класс должен вызвать paint(), теперь он расширяет JPanel вместо – ulthanex