0

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

好吧,我正在做 thebennybox 的 LWJGL 教程,并让它工作,然后当我的旧硬盘驱动器坏了 (RIP) 时,我又把它写了出来。我想要做的是添加多个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);

    }
4

1 回答 1

0

您的问题是由于两个问题而发生的。

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

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

此外,您实际上并不需要清除GL_DEPTH_BUFFER_BIT,因为initGL()您在其中使用禁用它glDisable(GL_DEPTH_TEST);(尽管GL_DEPTH_TEST默认情况下禁用)。而且由于您仅在 2D 空间中工作,因此没有实际深度,除非您使用GL_DEPTH_TEST对 2D 空间进行排序,同时仍使用 Z 值。

建议

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

我这么说的原因是你通过创建一个新的类实例GameObjectGOball虽然在里面你有浮点变量GOplayer和那些你设置为静态的变量,这意味着变量是共享的并且总是相同的. 因此,当您创建并设置and时,虽然当您创建并设置它的和其他内容时,这也会影响 the ,因此它们将具有相同且始终相同的值,因为变量是共享的!GOboxGameObjectxyGOballxyxyGOplayerxyGOballxy

于 2013-08-08T10:18:45.587 回答