从子类调用awt Frame方法

9 浏览
0 Comments

从子类调用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?

0