- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
作为学校的类(class)作业,我们必须提出一个自定义项目,我选择了一个原本打算在 ActionScript 上编写的游戏创意,但决定在 Java 上插入它。最初进展顺利,游戏代码正常运行, Sprite 动画处理得很好,一切都在游戏循环中维护。直到我开始尝试向其中添加按钮和标签等组件。
目前我的游戏的结构是这样的( GameSystem[处理循环和重绘] -- GameMenu [带有开始游戏的简单介绍屏幕] <---之间交换 ---> GameContainer [保存有关游戏的信息] )
我的游戏系统内的循环更新所有必要的对象,重新绘制,然后告诉所有对象在之后重新绘制。
游戏系统:
/**/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
/**/}
/**/}
这就是它开始变得不确定的地方,因为游戏系统每次循环都会重新绘制它自己,清除以前的内容的框架,我在游戏系统内创建的游戏菜单中添加的按钮会被清除,并且仅在以下情况下短暂重新出现:将鼠标悬停在它们上。
游戏菜单:
//////////////////
// 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);
/**/}
////////////////////////////////////
此时,我已经尝试了绘制、绘制组件、revalidate() 以及我从其他帖子中看到的各种其他东西,但没有一个有帮助。让按钮显示可见的唯一方法是删除游戏循环中对重绘的调用。然而,这会影响游戏,因为没有任何对象被重新绘制。
TL DR:如何处理更新列表中的各种对象的重绘以及刷新游戏系统面板而不使任何组件(例如按钮)消失?抱歉,如果这是一个新手问题,但这是我第一次使用 Java,因为我想从 ActionScript 向外扩展,如果需要更多信息,我很乐意添加到帖子中,谢谢您的帮助。
最佳答案
问题在于您尝试以不同于游戏绘制的方式处理按钮的绘制。
Game System
{
paint loop
{
painting Game
}
}
Components //managing the painting itself through paintComponent, trying to run at same time as Game System.
{
paintComponent
}
所以实际上,您想要将其中一个切换到另一个。您可以在 GameSystem
中使用 paintComponent()
而不是 paint()
,它会为您管理图形的处理和重新绘制(如果已经扩展了 jComponent)...
或者您需要像游戏中那样开始管理按钮的绘制,而不是依赖 paintComponent()
关于java - 面板/按钮和重新绘制令人头痛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20572378/
很抱歉新手的问题,但是: 我最近才发现“=”运算符不只是处理对象/等等。值(value),也是引用。这很酷,但我认为这对变量来说是不一样的,它不会在存储整数或 float 的变量之间创建引用。后来我觉
我是一名优秀的程序员,十分优秀!