我正在使用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);
}
答案 0 :(得分:0)
由于两个问题,您的问题就出现了。
1:在GameObject
类中,您的浮点变量x
和y
是静态的。他们不应该这样!
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
内创建了GameObject
,GOball
和GOplayer
的新实例GObox
你有浮动变量GameObject
和x
那些你设置为静态的变量,这意味着变量是共享的并且总是相同的。因此,当您创建y
并设置GOball
和x
设置y
和x
时,当您创建y
时将其GOplayer
和x
设置为其他内容,这也会影响y
,因此它们始终具有相同的GOball
和x
变量是共享的!