这个问题是关于框架、java和处理的。
这个问题听起来很复杂,但实际上不是。我会尽量把这个控制在最低限度。我在一个迷宫游戏中创造了一个小球,让我的头脑围绕物理和渲染。到目前为止这是一次很好的经历,但我遇到了一些麻烦。
我决定的总体布局是在一个awt框架内包含papplets,并将框架关闭。这样做的原因是因为我被告知你一次只能有一个丘疹。 PApplet
是 Applet
类中的一个渲染库。
我这里有三节课,包括主课
public class Menu extends PApplet
{
//images and buttons
PImage background, playbtn1, playbtn2, hsbtn1, hsbtn2, abbtn1, abbtn2, exbtn1, exbtn2;
FBox pBtn, hBtn, eBtn;
FWorld menu;
//simple constructor
public Menu()
{
}
public void setup()
{
size(600, 400);
smooth();
Fisica.init(this);
menu = new FWorld();
//loading and placing images
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");
//loading and placing buttons
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);
//add item to world
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();
}
//close this frame an open a new level, high score or exit
//depending on what the use clicks
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);
/* these are just for finding the parent
System.out.println(this.getName());
System.out.println(this.getParent().getName());
System.out.println(this.getParent().getParent().getName());
System.out.println(this.getParent().getParent().getParent().getName());
System.out.println(this.getParent().getParent().getParent().getParent().getName());
*/
ExampleFrame x = new ExampleFrame(new HighScores()); //for testing, you can change this to new menu()
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时需要做的是,框架中的所有内容都将被删除,并加载一个highscores屏幕。高分和菜单差不多。没有必要发布代码,因为这里已经足够了。
第二类是作为一个框架,并持有丘疹
总之,有人知道如何从papplet调用frame方法,或者用其他方法删除所有papplet内容并加载另一个papplet吗?
2条答案
按热度按时间qlzsbp2j1#
为了回答如何从papplet?调用frame方法,我将您的代码片段修改为最小值。在这个修改过的版本中,当用户点击鼠标按钮时
System.out
被解雇了。现在有两种方法可以访问
Frame
对象。但在此之前,我要说两点:当你创造了一个丘疹像
new ExampleFrame(new Menu());
把它加到你的JFrame
这样地add(app, BorderLayout.CENTER);
然后创建一个复杂的窗口/面板层次结构。这样地:
import java.awt.BorderLayout;
import javax.swing.JFrame;
import processing.core.PApplet;
public class ExampleFrame extends JFrame
{
private static final long serialVersionUID = 4792534036194728580L;
PApplet app;
}
import java.awt.Container;
import processing.core.PApplet;
import processing.core.PImage;
public class Menu extends PApplet
{
private static final long serialVersionUID = -6557167654705489372L;
}
public class Main {
public static void main(String[] args){
new ExampleFrame(new Menu());
}
}
tuwxkamq2#
当mousepressed==ebtn时需要做的是,框架中的所有内容都将被移除,并加载一个highscores屏幕
演示。在嵌套的
CardLayout
添加ActionListener
而不是MouseListener
. 它对鼠标和键盘输入都有React。在同一屏幕空间中包含多个gui元素还有许多其他方法。从我的头顶上,
JTabbedPane
,JSplitPane
,JDesktopPane
/JInternalFrame
,在一个JDialog
或者JOptionPane
..截图
cardlayoutdemo.java文件