我正在用java编写一个简单的游戏。我用 30 FPS 进行了碰撞测试,我必须得到窗口的大小。因为我无法访问 GUI 实例,所以我想我会创建一个共享实例,因为这在我来自的 Objective-C 中是相当标准的。
class GUI extends JFrame {
private static GUI _sharedInstance;
public static GUI sharedInstance() {
if (_sharedInstance == null) {
_sharedInstance = new GUI();
}
return _sharedInstance;
}
}
但由于某种原因,它真的很慢。然后我用大小的实例替换了共享实例public static final
,它现在工作得很快,即使是 60 FPS 或更高。
谁能解释我为什么会这样?
编辑
所以GUI.sharedInstance().getWidth()
我没有打电话,而是打电话GUI.windowSize.width
。我已经使用了public static final Dimension windowSize
。
编辑
这是碰撞检测。所以,int width = GUI.kWindowWidth;
我int width = GUI.sharedInstance().getWidth();
之前没有打电话,而是打电话。
// Appears on other side
if (kAppearsOnOtherSide) {
int width = GUI.kWindowWidth;
int height = GUI.kWindowHeight;
// Slow
// int width = GUI.sharedInstance().getWidth();
// int width = GUI.sharedInstance().getHeight();
Point p = this.getSnakeHead().getLocation();
int headX = p.x;
int headY = p.y;
if (headX >= width) {
this.getSnakeHead().setLocation(new Point(headX - width, headY));
} else if (headX < 0) {
this.getSnakeHead().setLocation(new Point(headX + width, headY));
} else if (headY >= height) {
this.getSnakeHead().setLocation(new Point(headX, headY - height));
} else if (headY < 0) {
this.getSnakeHead().setLocation(new Point(headX, headY + height));
}
}