【发布时间】:2013-07-19 13:13:44
【问题描述】:
我正在尝试制作一个 2D 基础游戏;有点像泰拉瑞亚,主要是为了提高我的 openGL 知识(使用 Java 和 LWJGL)。
目前,我正在四边形上绘制纹理,一切正常,但是,我似乎无法滚动此窗口(据我所知,这应该由 glTranslate 完成..
代码:
private void init() {
try {
Display.setDisplayMode(new DisplayMode(window_width, window_height));
Display.setTitle(window_title);
Display.setVSyncEnabled(true);
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
translatex = 0f;
w = new World();
w.placeBlock(4, 5, Blocks.STONE);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, window_width, window_height, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable(GL_TEXTURE_2D);
Font awtFont = new Font("Courier New", Font.BOLD, 12);
font = new TrueTypeFont(awtFont, antiAlias);
}
private void gameLoop() {
while (!Display.isCloseRequested()) {
glClear(GL_COLOR_BUFFER_BIT);
glLoadIdentity();
glPushMatrix();
glTranslatef(translatex, 0.0f, 0.0f);
if (Keyboard.isKeyDown(Keyboard.KEY_SPACE)) {
translatex += 2.0f;
}
w.draw();
inputManager();
glPopMatrix();
Display.update();
Display.sync(fps);
}
}
绘制方法
public void draw() {
texture.bind();
glLoadIdentity();
glTranslatef(x, y, 0);
glBegin(GL_QUADS); {
glTexCoord2f(0, 0);
glVertex2f(0, 0);
glTexCoord2f(1, 0);
glVertex2f(BLOCK_SIZE, 0);
glTexCoord2f(1, 1);
glVertex2f(BLOCK_SIZE, BLOCK_SIZE);
glTexCoord2f(0, 1);
glVertex2f(0, BLOCK_SIZE);
}
glEnd();
glLoadIdentity();
}
没有纹理它可以正常工作,但我不能让它工作来挽救我的生命.. 代码临时设置了游戏循环,以尝试在按下空格键时进行一些基本的翻译
我需要使用其他方法吗?我怎样才能让它工作?
顺便说一句,使用 slick-util 和 lwjgl 库...
............编辑............
没有完全修复它,但找到了另一种解决方法。我修改了draw方法来接受一些偏移变量,并使用相对平移来偏移每个纹理的四边形
public void draw(int offset_x, int offset_y) {
texture.bind();
glLoadIdentity();
glTranslatef(x - offset_x, y - offset_y, 0);
glBegin(GL_QUADS); {
// Drawing the quads here
}
glEnd();
glLoadIdentity();
}
然后通过这个调用:
w.draw(translatex, 0);
这只是一种解决方法,但它确实有效,所以。如果有人有实际的解决方案,我不禁认为它会更有效率......
【问题讨论】: