从子类调用awt Frame方法
从子类调用awt Frame方法
这个问题涉及到Frames、Java和Processing。
这个问题听起来很复杂,但实际上并不是。我会尽量简洁地解释。我正在创建一个迷宫游戏中的小球,以便更好地理解物理和渲染。到目前为止,这是一次很好的经历,但我遇到了一些麻烦。
我决定的一般布局是在AWT Frame中包含PApplets并关闭Frame。这样做的原因是因为有人告诉我一次只能有一个Papplet实例。
PApplet是Processing中的Applet类,是一个渲染库。
这里有3个类,包括主类:
public class Menu extends PApplet
{
// 图像和按钮
PImage background, playbtn1, playbtn2, hsbtn1, hsbtn2, abbtn1, abbtn2, exbtn1, exbtn2;
FBox pBtn, hBtn, eBtn;
FWorld menu;
// 简单构造函数
public Menu()
{
}
public void setup()
{
size(600, 400);
smooth();
Fisica.init(this);
menu = new FWorld();
// 加载和放置图像
background = loadImage("MenuAlt.jpg");
System.out.println(background);
playbtn1 = loadImage("play1.gif");
playbtn2 = loadImage("play2.gif");
hsbtn1 = loadImage("high1.gif");
hsbtn2 = loadImage("high2.gif");
exbtn1 = loadImage("exit1.gif");
exbtn2 = loadImage("exit2.gif");
// 加载和放置按钮
pBtn = new FBox(120, 150);
pBtn.setPosition(135, 215);
pBtn.setDrawable(false);
hBtn = new FBox(120, 150);
hBtn.setPosition(295, 215);
hBtn.setDrawable(false);
eBtn = new FBox(120, 150);
eBtn.setPosition(455, 215);
eBtn.setDrawable(false);
// 添加物品到世界中
menu.add(pBtn);
menu.add(hBtn);
menu.add(eBtn);
}
public void draw()
{
image(background, 0, 0);
image(playbtn1, 80, 140);
image(hsbtn1, 237, 135);
image(exbtn1, 400, 140);
mouseOver();
menu.draw();
}
// 关闭这个窗口并打开一个新的关卡、高分或退出,具体取决于用户点击的内容
public void mousePressed()
{
FBody pressed = menu.getBody(mouseX, mouseY);
if (pressed == pBtn)
{
System.out.println("play game");
this.getParent().getParent().getParent().getParent().setVisible(false);
ExampleFrame x = new ExampleFrame(new Level("level1.txt"));
x.setLocation(this.getParent().getParent().getParent().getParent().getLocation());
}
if (pressed == hBtn)
{
System.out.println("high scores");
this.getParent().getParent().getParent().getParent().setVisible(false);
ExampleFrame x = new ExampleFrame(new HighScores());
x.setLocation(this.getParent().getParent().getParent().getParent().getLocation());
}
if (pressed == eBtn)
{
System.out.println("exit");
System.exit(0);
}
}
}
exampleFrame类
public class ExampleFrame extends JFrame
{
PApplet app;
public ExampleFrame(PApplet emApp)
{
super("Ball Maze Game");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocation(200, 200);
app = emApp;
setSize(615,438);
setVisible(true);
setLayout(new BorderLayout());
add(app, BorderLayout.CENTER);
app.init();
}
}
主类
public class Main
{
public static void main(String[] args)
{
ExampleFrame x = new ExampleFrame(new Menu());
}
}
当mousePressed == eBtn时,需要做的是删除Frame中的所有内容并加载一个Highscores屏幕。highscores与menu几乎相同。不需要贴出代码,因为这里已经有足够的代码。
第二个类是一个作为框架并持有PApplet的类。
总之,有没有人知道如何从PApplet调用Frame方法,或者有没有其他方法可以删除所有PApplet内容并加载另一个PApplet?