我正在尝试绑定一个键来在屏幕上翻译GL_QUAD。我创建了一个类,如下所示,它实现了KeyListener,在其中我有一个方法,在'd'的按键时,将四个顶点的x坐标加0.1。现在,我有两个与此相关的问题。
首先,它似乎没有做任何事情。按键时,对象没有任何反应。
有没有更好的方法来实现我想做的事情?我的最终目标是最终得到一个专注于相机的精灵,它可以在一个视觉上的2D游戏世界中移动。
感谢您的时间。
代码:
SpriteTest.java
package com.mangostudios.spritetest;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import com.jogamp.opengl.util.FPSAnimator;
public class SpriteTest
{
public static void main(String[] args) {
GLProfile glp = GLProfile.getDefault();
GLCapabilities caps = new GLCapabilities(glp);
GLCanvas canvas = new GLCanvas(caps);
Frame frame = new Frame("AWT Window Test");
frame.setSize(300, 300);
frame.add(canvas);
frame.setVisible(true);
frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
canvas.addGLEventListener(new Renderer());
FPSAnimator animator = new FPSAnimator(canvas, 60);
//animator.add(canvas);
animator.start();
}
}
Renderer.java
package com.mangostudios.spritetest;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLEventListener;
public class Renderer implements GLEventListener {
InputListener input = new InputListener();
@Override
public void display(GLAutoDrawable drawable) {
update();
render(drawable);
}
@Override
public void dispose(GLAutoDrawable drawable) {
}
@Override
public void init(GLAutoDrawable drawable) {
}
@Override
public void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
}
private void update() {
}
private void render(GLAutoDrawable drawable) {
GL2 gl = drawable.getGL().getGL2();
// draw a triangle filling the window
gl.glBegin(GL2.GL_QUADS);
gl.glVertex2f( input.xTran, 0.1f);
gl.glVertex2f( input.xTran,-0.1f);
gl.glVertex2f( -input.xTran, -0.1f);
gl.glVertex2f( -input.xTran, 0.1f);
gl.glEnd();
}
}
InputListener.java
package com.mangostudios.spritetest;
import com.jogamp.newt.event.KeyEvent;
import com.jogamp.newt.event.KeyListener;
public class InputListener implements KeyListener{
boolean loopBool = false;
float xTran = 0.1f;
float yTran = 0.1f;
@Override
public void keyPressed(KeyEvent d) {
loopBool = true;
while (loopBool = true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public void keyReleased(KeyEvent d) {
}
}
答案 0 :(得分:1)
首先,你永远不会调用addKeyListener()。其次,你不应该在keyPressed()中加入无限循环。第三,使用NEWT KeyListener,而使用AWT GLCanvas:s使用GLWindow和NEWT KeyListener,或者使用带有AWT KeyListener的AWT GLCanvas或使用NewtCanvasAWT。最后,在编写自己的示例之前,请尝试mine on Wikipedia以了解其工作原理。