添加多个GameObjects LWJGL

时间:2013-08-04 10:42:48

标签: java lwjgl

我正在使用LWJGL制作乒乓球。

我正在通过thebennybox进行LWJGL教程,并且让它工作,然后当我的旧硬盘死了(R.I.P)时我再次写出来。我要做的是添加多个GameObjects并让它们显示出来,我发现它们已被添加到GameObject objects列表中。以下是我的保管箱中的代码:https://www.dropbox.com/s/ccs37jqm1b5oi84/lwjglGame.zip

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

这是来自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);

    }

1 个答案:

答案 0 :(得分:0)

由于两个问题,您的问题就出现了。

1:在GameObject类中,您的浮点变量xy是静态的。他们不应该这样!

2:在你调用Draw的{​​{1}}类中,这也不应该存在,因为它的作用是清除深度和颜色缓冲区,这导致每次渲染为“rect” “使用你清除屏幕的glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);,所以最后只会显示最后渲染的”rect“!

此外,您并不需要清除Draw.rect,因为在GL_DEPTH_BUFFER_BIT内您使用initGL()禁用它(尽管默认情况下会禁用glDisable(GL_DEPTH_TEST);)。而且由于你只在2D空间工作,所以没有实际的深度,除非你使用GL_DEPTH_TEST对2D空间进行排序,同时仍然使用Z值。

建议

以下是我的一些建议,如果您不是100%知道Java中的所有主要/基本关键字,或者只是不知道如何正确使用它们,那么首先使用LWJGL创建一个使用OpenGL的游戏,在某些时候对你来说会变得非常困难。我建议你从容易开始的事情开始,或者从阅读或观看有关Java基础知识的多个教程开始。

我之所以这样说是因为您在GL_DEPTH_TEST内创建了GameObjectGOballGOplayer的新实例GObox你有浮动变量GameObjectx那些你设置为静态的变量,这意味着变量是共享的并且总是相同的。因此,当您创建y并设置GOballx设置yx时,当您创建y时将其GOplayerx设置为其他内容,这也会影响y,因此它们始终具有相同的GOballx变量是共享的!