如何在Java中声明方法之外的Object数组

时间:2014-04-17 19:18:41

标签: java arrays swing object scope

我对java很新,所以请原谅我可能编写的任何糟糕的代码。所以我一直试图制作一个简单的迷宫游戏,我希望有一个包含所有矩形的数组。我已经能够使用矩形数组,只要我把它放在一个方法中。一旦我将数组带到类级别,我就会收到错误"令牌上的语法错误&#34 ;;",{在此令牌之后预期"在第一个分号和错误"语法错误,插入"}"完成Block"在最后一个分号上。我想使数组类级别,所以我可以在一个方法中初始化矩形,并在另一个方法中绘制。我想这样做,因为我希望能够使矩形移动,并重复绘制方法。如果我在paint方法中初始化矩形数组,则x和y将粘贴到该位置。如果我在开始方法中初始化矩形数组并不重复,我就无法在paint方法中访问矩形数组,以实际将它们绘制到屏幕上。我绝对不希望公开矩形数组,因为我听说这样做是不好的做法。我知道我可能需要完全重新组织我的代码,我愿意这样做。我花了好几个小时敲打我的头,在互联网上寻找修复,但我还没找到。谢谢。

这是*游戏类的大部分内容

*我不想用文字垃圾页面。

public class GamePanel extends JPanel implements ActionListener, KeyListener{
double WindowScale;
boolean upPressed = false;
boolean downPressed = false;
boolean leftPressed = false;
boolean rightPressed = false;
boolean hitDetect = false;
Timer timer = new Timer(1000/60, this);
Player player1 = new Player();
public GamePanel(double scale){
    setBackground(Color.BLACK);
    WindowScale = scale;
    setFocusable(true);
    addKeyListener(this);
    RestartTimer();
}

public void RestartTimer(){
    timer.stop();
    setFocusable(true);
    addKeyListener(this);
    timer.start();
}

public void actionPerformed(ActionEvent e){
    frame();
}

public void frame(){
    if(upPressed){
        player1.setY(player1.getY() - player1.getVertSpeed());
    } if(downPressed){
        player1.setY(player1.getY() + player1.getVertSpeed());
    } if(leftPressed){
        player1.setX(player1.getX() - player1.getHorizSpeed());
    } if(rightPressed){
        player1.setX(player1.getX() + player1.getHorizSpeed());
    }
    if(hitDetect==true){
        hitDetect = false;
        player1.setX(player1.getRespawnX());
        player1.setY(player1.getRespawnY());
        RestartTimer();

    }

    repaint();
}

public void paintComponent(Graphics g){

    Rectangle[] RectangleArray = new Rectangle[11];
    RectangleArray[0] = new Rectangle(0,50,850,10,255,255,255);
    RectangleArray[1] = new Rectangle(0,0,10,680,255,255,255);
    RectangleArray[2] = new Rectangle(0,0,900,10,255,255,255);
    RectangleArray[3] = new Rectangle(890,0,10,640,255,255,255);
    RectangleArray[4] = new Rectangle(50,100,850,10,255,255,255);
    RectangleArray[5] = new Rectangle(10,200,40,10,255,255,255);
    RectangleArray[6] = new Rectangle(50,200,30,10,255,255,255,true,110,200,5);
    RectangleArray[7] = new Rectangle(80,200,30,10,255,255,255);
    RectangleArray[8] = new Rectangle(110,200,30,10,255,255,255);
    RectangleArray[9] = new Rectangle(140,200,30,10,255,255,255);
    RectangleArray[10] = new Rectangle(170,200,30,10,255,255,255);

这里是矩形类(没有getter和setter):

public Rectangle(int x, int y, int width, int height, int red, int green, int blue){
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
    this.red = red;
    this.green = green;
    this.blue = blue;
}
public Rectangle(int x, int y, int width, int height, int red, int green, int blue, boolean MoveVertTrue, int MaxHeight, int MinHeight, int MoveSpeed){
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
    this.red = red;
    this.green = green;
    this.blue = blue;
    this.MaxHeight = MaxHeight;
    this.MinHeight = MinHeight;
    this.MoveSpeed = MoveSpeed;
    this.FlipTrue = false;
}

public Rectangle(int x, int y, int width, int height, int red, int green, int blue, int MaxWidth, int MinWidth, int MoveSpeed){
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
    this.red = red;
    this.green = green;
    this.blue = blue;
    this.MaxWidth = MaxWidth;
    this.MinWidth = MinWidth;
    this.MoveSpeed = MoveSpeed;
    this.FlipTrue = false;
}

public void VertMove(){
    if(FlipTrue == true){
        y += MoveSpeed;
    } if(FlipTrue == false){
        y += - MoveSpeed;
        System.out.println("lol");
    } if(y<MinHeight){
        FlipTrue = true;
    } if(y>MaxHeight){
        FlipTrue = false;
    }
}

0 个答案:

没有答案