2

我正在制作一个小游戏,其中 Main 类包含所有对象和变量,并在类本身中调用完成大部分工作的方法。很标准。不幸的是,这意味着我需要的许多变量都在 Main 类中,我无法访问它们。

例如,作为一个测试,我想让一个球在屏幕上弹跳,这很简单,但我需要屏幕的尺寸,我可以使用getSize()主类中的方法轻松获得。但是当我创建Ball会反弹的类时,我无法访问该getSize()方法,因为它在Main类中。反正有调用吗?

我知道我可以将变量传递给Ball构造函数中的类或我需要的每个方法,但我想看看是否有某种方法可以在需要时获取所需的任何变量,而不是在任何时候传递所有信息我制作了一个新对象。

主类

public void Main extends JApplet {
    public int width = getSize().width;
    public int height = getSize().height;

    public void init(){
        Ball ball = new Ball();
    }
}

球类

public void Ball {
    int screenWidth;
    int screenHeight;

    public Ball(){
        //Something to get variables from main class
    }
}
4

3 回答 3

3

将您需要的变量传递给您的对象。您甚至可以创建一个包含类所需的所有常量/配置的单例类。

给出的例子:

常量类

public class Constants {
    private static Constants instance;

    private int width;
    private int height;

    private Constants() {
        //initialize data,set some parameters...
    }

    public static Constants getInstance() {
        if (instance == null) {
            instance = new Constants();
        }
        return instance;
    }

    //getters and setters for widht and height...
}

主班

public class Main extends JApplet {
    public int width = getSize().width;
    public int height = getSize().height;

    public void init(){
        Constants.getInstance().setWidth(width);
        Constants.getInstance().setHeight(height);
        Ball ball = new Ball();
    }
}

球类

public class Ball {
    int screenWidth;
    int screenHeight;

    public Ball(){
        this.screenWidth = Constants.getInstance().getWidth();
        this.screenHeight= Constants.getInstance().getHeight();
    }
}

另一种方法是使用您需要的参数启动对象实例。给出的例子:

主班

public class Main extends JApplet {
    public int width = getSize().width;
    public int height = getSize().height;

    public void init(){
        Ball ball = new Ball(width, height);
    }
}

球类

public class Ball {
    int screenWidth;
    int screenHeight;

    public Ball(int width, int height){
        this.screenWidth = width;
        this.screenHeight= height;
    }
}

有更多的方法可以实现这一点,只要看看你自己,选择你认为对你的项目更好的方法。

于 2012-05-03T06:06:49.193 回答
1

您只需使用两个 arg 构造函数即可访问它们。

public void init(){
        Ball ball = new Ball(width,height);
    }

public Ball(width,height){
        //access variables here from main class
    }
于 2012-05-03T06:07:34.853 回答
0

为什么不这样:

public void Main extends JApplet {
public int width = getSize().width;
public int height = getSize().height;

public void init(){
    Ball ball = new Ball(width, height);
}


public void Ball {

public Ball(int screenWidth, int screenHeight){
    //use the variables
}
于 2012-05-03T06:10:18.963 回答