我正在尝试用java制作游戏,而我正在使用LWJGL。因此,我可以使用箭头键在屏幕上移动四边形,它非常好用。虽然它的代码在Main
构造函数中,但它看起来不太好。所以我决定将它放在一个方法中并在Main
构造函数中调用该方法以在构造函数中保存一些空间。但是,当我将代码放入方法并调用它时,该函数不起作用。当我按下箭头键时,立方体不会移动。
这是我的移动方法(在主构造函数中调用时不执行任何操作):
public static void moveSquare(float x, float y, float speed, int deltaTime){
if(Keyboard.isKeyDown(Keyboard.KEY_RIGHT)){
x += speed * deltaTime;
}
if(Keyboard.isKeyDown(Keyboard.KEY_LEFT)){
x -= speed * deltaTime;
}
if(Keyboard.isKeyDown(Keyboard.KEY_UP)){
y -= speed * deltaTime;
}
if(Keyboard.isKeyDown(Keyboard.KEY_DOWN)){
y += speed * deltaTime;
}
这是游戏循环所在的Main构造函数。我有的一些实例是float x,float y,float speed,int width和int height。以防你在代码中看到它们被引用并想知道它们来自何处。
public Main(){
Display.setTitle("Squares!");
try {
Display.setDisplayMode(new DisplayMode(800,600));
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
initGL();
while(!Display.isCloseRequested()){
int deltaTime = getDelta();
drawSquare(x, y, width, height);
moveSquare(x, y, speed, deltaTime);
initClock();
Display.update();
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
Display.sync(64);
}
Display.destroy();
}
答案 0 :(得分:0)
静态方法属于类,而不属于对象。如果你想访问静态方法中的非静态字段,如x,y,speed ......它会给你一个错误。但是你在这里做的是将一些参数传递给你的移动方法,这对他们做了一些事情并不重要,因为那只会修改你方法中的那些副本。
我们假设您有一个Square
类,并且您希望使用不应该是静态的移动方法移动它
public void move(float dt){
//move stuff here
}
你甚至不必仅传递参数delta时间,因为每个方形对象都有自己的副本(如果不是静态的),move将使用它们。