我正在制作一个小型游戏,其中Main类包含所有对象和变量,并在类本身内调用方法来完成大部分工作。很标准。不幸的是,这意味着我需要的许多变量都在Main类中,我无法访问它们。
例如,作为测试,我想让一个球在屏幕上反弹,这很简单,但我需要屏幕的尺寸,我可以使用主类中的getSize()
方法轻松获得。但是当我创建将会反弹的Ball
类时,我无法访问getSize()
方法,因为它位于Main
类中。无论如何要打电话吗?
我知道我可以将变量传递给构造函数中的Ball
类或我需要的每个方法,但是我想知道是否有某些方法可以在需要时使用我需要的任何变量,而不是每当我创建一个新对象时都将所有信息传递给它。
Main.class
public void Main extends JApplet {
public int width = getSize().width;
public int height = getSize().height;
public void init(){
Ball ball = new Ball();
}
}
Ball.class
public void Ball {
int screenWidth;
int screenHeight;
public Ball(){
//Something to get variables from main class
}
}
答案 0 :(得分:2)
将您需要的变量传递给对象。您甚至可以创建一个包含类所需的所有常量/配置的单例类。
给出的例子:
常量类
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;
}
}
有更多方法可以实现这一目标,只需自己选择并选择您认为对您的项目更好的那个。
答案 1 :(得分:1)
您只需使用两个arg构造函数即可访问它们。
public void init(){
Ball ball = new Ball(width,height);
}
public Ball(width,height){
//access variables here from main class
}
答案 2 :(得分: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
}