我在java中制作网页游戏,每次进入GUI设计时都遇到麻烦,通常我会查看其他代码并复制大部分设计,而我无法决定应该使用哪种设计。我使用了Applet,Canvas,JFrame。我需要的是在不同游戏之间切换的主循环和绘图功能。那么我应该使用哪个类和哪个设计,哪个更好,为什么,可能链接到有用的教程和示例...请解释你的建议。感谢。
答案 0 :(得分:4)
如果您想要解析某些代码,请查看Killer Game Programming in Java
这本书很好,即使它现在使用的是旧图书馆。几年前我买了它。如果您不喜欢购买它,您仍然可以从网站下载所有源代码
您可以非常轻松地抽象出使用Applet或Java Web Start之间的选择。如果选择,我会选择JWS,纯粹是因为我发现设置开发环境更容易调试。
这两个链接演示了如何使用JFrame v Canvas:
答案 1 :(得分:2)
这是主要区别。您可以在自己的Canvas(用于AWT)或JPanel(用于Swing)中进行绘制,并将其放在(J)Applet或(J)Frame中,从而将两者之间的差异抽象出来,直到您准备好决定。 / p>
答案 2 :(得分:1)
我会使用包含JPanels的JFrame开发您的应用程序。
当您准备好上网时,您可以使用java web start来启动您的JFrame。
我使用了Sun的java教程,它们非常有效。
答案 3 :(得分:0)
您可以编写一个包装类,使您的游戏可以作为applet(JApplet)或基于JFrame的应用程序运行。
然后我会在JPanel上编写所有特定于游戏的代码,该JPanel是作为JApplet或JFrame的子代添加的。您可以使用与以前使用Canvas完全相同的方式使用JPanel。
以下示例代码:
import javax.swing.JApplet;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class AppletApp extends JApplet {
public void init() {
// do any applet-specific initialisation here
getContentPane().add(new AppPanel());
}
private static final class AppPanel extends JPanel {
public AppPanel() {
// do any common initialisation here
add(new JButton("Hello World!"));
}
}
public static void main(String[] args) {
// do any frame-specific initialisation here
JFrame f=new JFrame("Frame");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
AppPanel appPanel=new AppPanel();
f.getContentPane().add(appPanel);
f.pack();
f.setVisible(true);
}
}
显然这只是一个玩具示例 - 通常你想把你的AppPanel分成一个单独的类文件等......
答案 4 :(得分:0)
与PaŭloEbermann一样,开发自己的画布或任何其他显示器组件是最好的方法(根据我的观点)。
您选择的组件也取决于您选择的库。如果只使用Java2D标准开发Java组件就足够了。如果切换到LWJGL,JOGL或其他库,它们通常会提供自己的组件。
特别是JOGL还提供了一种实现游戏循环的特定方法,因为它是由名为Animator的Thread驱动的。如果你想让你的设计与JOGL兼容,你必须让你的游戏循环与这个线程兼容。