Java 添加多个游戏对象LWJGL

Java 添加多个游戏对象LWJGL,java,lwjgl,Java,Lwjgl,我正在考虑使用LWJGL制作乒乓球 我当时正在做Bennybox的LWJGL教程,让它正常工作,然后当我的旧硬盘死机(R.I.p.)时,我又把它写了出来。我想做的是添加多个游戏对象并让它们显示出来,我发现它们被添加到游戏对象列表中。以下是我的dropbox中的代码: 在这里穿有点太大了,但这里有一个主要部分: 这来自Game.java: private ArrayList<GameObject> objects; public Game() { object

我正在考虑使用LWJGL制作乒乓球

我当时正在做Bennybox的LWJGL教程,让它正常工作,然后当我的旧硬盘死机(R.I.p.)时,我又把它写了出来。我想做的是添加多个
游戏对象
并让它们显示出来,我发现它们被添加到
游戏对象
列表中。以下是我的dropbox中的代码:

在这里穿有点太大了,但这里有一个主要部分:

这来自Game.java:

private ArrayList<GameObject> objects;

    public Game() {
        objects = new ArrayList<GameObject>();

        GOplayer player = new GOplayer(0, Display.getDisplayMode().getHeight()/2);
        GOball ball = new GOball(Display.getDisplayMode().getWidth()/2-GOball.SIZE-2, Display.getDisplayMode().getHeight()/2);

        objects.add(player);
        objects.add(ball);

    }
私有ArrayList对象;
公共游戏(){
objects=newarraylist();
GOplayer=新的GOplayer(0,Display.getDisplayMode().getHeight()/2);
GOball ball=new GOball(Display.getDisplayMode().getWidth()/2-GOball.SIZE-2,Display.getDisplayMode().getHeight()/2);
对象。添加(玩家);
对象。添加(球);
}

出现问题的原因有两个

1:在
GameObject
类中,浮动变量
x
y
是静态的。他们不应该这样

2:在您调用的
Draw
类中
glClear(GL\u COLOR\u BUFFER\u BIT | GL\u DEPTH\u BUFFER\u BIT)这也不应该存在,因为这样做是清除深度和颜色缓冲区,这会导致每次使用您的
Draw.rect
渲染一个“rect”,从而清除屏幕,因此最后只显示最后渲染的“rect”

此外,您实际上不需要清除
GL\u DEPTH\u BUFFER\u位
,因为在
initGL()
中,您可以使用
glDisable(GL\u DEPTH\u TEST)禁用它(尽管默认情况下禁用了
GL\u DEPTH\u TEST
)。由于您只在二维空间中工作,因此没有实际深度,除非您使用
GL_depth_TEST
对二维空间进行排序,同时仍然使用Z值

忠告 这里是我的一些建议,如果您不100%了解Java中的所有主要/基本关键字,或者不知道如何正确使用它们,那么从使用LWJGL创建OpenGL游戏开始,在某个时候对您来说将变得非常困难。我建议您从更简单的内容开始,或者从阅读或观看有关Java基础知识的多个教程开始

我之所以这么说,是因为您通过
GOball
GOplayer
GObox
创建了类
GameObject
的新实例,尽管在
GameObject
中有浮动变量
x
y
这些变量是您设置为静态的,这意味着变量是共享的,并且总是相同的。因此,当您创建一个
GOball
并设置
x
y
以设置
x
y
时,尽管当您创建
GOplayer
并将其设置为
x
y
时,这也会影响
GOball
,因此它们将始终具有相同的
x
y
,因为变量是共享的