I';我试图从类(Starting.java)中打开一个类(FlappyBird.java),但我不能使用;新游戏().setvisible(true)";
我有这两门课。一个是游戏,另一个是菜单类。我的目标是从类(Starting.java)中打开一个类(FlappyBird.java),但是我不能使用“new FlappyBird().setVisible(true)”有人知道如何解决这个问题吗I';我试图从类(Starting.java)中打开一个类(FlappyBird.java),但我不能使用;新游戏().setvisible(true)";,java,eclipse,Java,Eclipse,我有这两门课。一个是游戏,另一个是菜单类。我的目标是从类(Starting.java)中打开一个类(FlappyBird.java),但是我不能使用“new FlappyBird().setVisible(true)”有人知道如何解决这个问题吗 public class FlappyBird implements ActionListener, MouseListener, KeyListener { public static FlappyBird flappybird; int width
public class FlappyBird implements ActionListener, MouseListener, KeyListener {
public static FlappyBird flappybird;
int width=800,height=600;
public Renderer renderer;
public Rectangle bird;
public Random rand;
public ArrayList <Rectangle>columns;
public int ticks,yMotion;
public boolean gameOver,started;
public int score;
public FlappyBird() {
renderer=new Renderer();
rand=new Random();
Timer timer=new Timer(20, this);
JFrame jframe=new JFrame();
jframe.add(renderer);
jframe.setSize(width, height);
jframe.setVisible(true);
jframe.setResizable(false);
jframe.setTitle("Flappy Bird");
jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jframe.addMouseListener(this);
jframe.addKeyListener(this);
bird=new Rectangle(width/2-10,height/2-10,20,20);
columns=new ArrayList<Rectangle>();
addColumn(true);
addColumn(true);
timer.start();
}
public void addColumn(boolean start) {
int space=300;
int widthh=100;
int heightt=50+rand.nextInt(300);
if(start) {
columns.add(new Rectangle(width+widthh+columns.size()*300,height-heightt-120,widthh,heightt));
columns.add(new Rectangle(width+widthh+(columns.size()-1)*300,0,widthh,height-heightt-space));
}else {
columns.add(new Rectangle(columns.get(columns.size()-1).x+600,height-heightt-120,widthh,heightt));
columns.add(new Rectangle(columns.get(columns.size()-1).x,0,widthh,height-heightt-space));
}
}
public void paintColumn(Graphics g,Rectangle column) {
g.setColor(Color.GREEN.darker());
g.fillRect(column.x, column.y, column.width, column.height);
}
public void repaint(Graphics g) {
g.setColor(Color.CYAN);
g.fillRect(0, 0, width, height);
g.setColor(Color.orange);
g.fillRect(0, height-120, width, 130);
g.setColor(Color.green);
g.fillRect(0, height-120, width, 20);
g.setColor(Color.red);
g.fillRect(bird.x, bird.y, bird.width, bird.height);
for(Rectangle column: columns) {
paintColumn(g,column);
}
g.setColor(Color.white);
g.setFont(new Font("Ariel",1,100));
if(gameOver) {
g.drawString("Game Over", 100, height/2-50);
}
if(!started) {
g.drawString("Click to Start", 100, height/2-50);
}
if(!gameOver && started) {
g.drawString(String.valueOf(score), width/2-50, 100);
}
}
public static void main(String[] args) {
flappybird=new FlappyBird();
}
@Override
public void actionPerformed(ActionEvent arg0) {
int speed=5;
ticks++;
if(started) {
for(int i=0;i<columns.size();i++) {
Rectangle rec = columns.get(i);
rec.x-=speed;
}
if(ticks %2 == 0 && yMotion<15) {
yMotion += 2;
}
for(int i=0;i<columns.size();i++) {
Rectangle column=columns.get(i);
if(column.x+column.width<0) {
columns.remove(column);
if(column.y==0) {
addColumn(false);
}
}
}
bird.y+= yMotion;
for(Rectangle column: columns) {
if(column.y==0 && bird.x+bird.width/2 > column.x+column.width/2- 5 && bird.x+bird.width/2<column.x+column.width/2+5) {
score++;
}
if(column.intersects(bird)) {
gameOver=true;
if(bird.x<=column.x) {
bird.x=column.x-bird.width;
}else {
if(column.y !=0 ) {
bird.y=column.y-bird.height;
}
}
bird.x=column.x-bird.width;
}
}
if(bird.y > height-120 || bird.y<0 ||bird.y>475 ) {
gameOver=true;
}
if(bird.y+yMotion >= height-120){
bird.y=height-120-bird.height;
}
}
renderer.repaint();
}
public void jump() {
if(gameOver) {
bird=new Rectangle(width/2-10,height/2-10,20,20);
columns.clear();
yMotion=0;
score=0;
addColumn(true);
addColumn(true);
gameOver=false;
}
if(!started) {
started=true;
}
else if(!gameOver) {
if(yMotion>0) {
yMotion=0;
}
yMotion-=10;
}
}
@Override
public void mouseClicked(MouseEvent arg0) {
jump();
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent arg0) {
}
@Override
public void keyReleased(KeyEvent arg0) {
if(arg0.getKeyCode()==KeyEvent.VK_SPACE) {
jump();
}
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
问题是我不能键入“new FlappyBird().setVisible(true);“有人能修复这个错误吗?您的游戏类没有实现任何java的可视化界面。。。添加“扩展JFrame” 这样就可以了。一些可能的原因:
- Check setVisible具有
修饰符公共
- 检查设置可见参数计数
- 如果类在同一个包中,请检查setVisible是否受保护或根本没有修改器
- 让游戏实现一个提供setVisible方法的接口
- 让游戏在不使用私有修饰符的情况下扩展一个提供setVisible方法的类
- 检查游戏类是否导入了正确的类
“父用户界面”
(带有信息标签,仅包含用户界面组件等)游戏类(操作、统计等控制器)游戏实例数据存储类(玩家姓名等)
在这种情况下,您不需要扩展swing组件(例如JFrame)——无论是在游戏类中,还是在实例数据存储类中,只要在“查看器”中——在我的情况下,您可以通过控制器方法提供数据
(UI可以包括游戏控制器的实例,在游戏控制器中,您还可以创建特定游戏的实例)
你得到了什么错误?你能分享游戏类的全部代码吗?那是一个游戏类,不是FlappyBird检查我的FlappyBird类我不想使用extends JFrame,有没有办法解决坚持使用相同内容的问题。
public class Starting extends JFrame{
JLabel l = new JLabel("Name:");
JTextField t= new JTextField(10);
JButton start = new JButton("Start");
JButton back = new JButton("Back");
JPanel p1 = new JPanel();
public Starting() {
p1.add(l);
p1.add(t);
p1.add(start);
p1.add(back);
this.add(p1);
this.setTitle("Starting");
this.setSize(300,300);
start.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
dispose();
new FlappyBird().setVisible(true);
}
});
}
public static void main(String[] args) {
Starting l = new Starting();
l.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
public class Game extends JFrame implements ActionListener, MouseListener, KeyListener { ... }