Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Input KeyListener和JOGL的问题_Input_2d_Keylistener_Jogl_Translate Animation - Fatal编程技术网

Input KeyListener和JOGL的问题

Input KeyListener和JOGL的问题,input,2d,keylistener,jogl,translate-animation,Input,2d,Keylistener,Jogl,Translate Animation,我正试图绑定一个键来在屏幕上转换一个GL_四元组。我创建了一个实现KeyListener的类(我将在下面附加),其中我有一个方法,在按下“d”键时,向四边形顶点的x坐标添加0.1。现在,我有两个与此相关的问题 首先,它似乎没有任何作用。按键时,对象不会发生任何变化 有没有更好的方法来实现我的目标?我的最终目标是最终得到一个精灵,相机聚焦在这个精灵上,它可以在视觉上的2D游戏世界中移动 谢谢你抽出时间 代码: SpriteTest.java package com.mangostudios.spr

我正试图绑定一个键来在屏幕上转换一个GL_四元组。我创建了一个实现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) {
        }
    }
    

    起初,您从未调用addKeyListener()。其次,不应该在keyPressed()中放入无限循环。第三,使用NEWT KeyListener而使用AWT GLCanvas:s而不是将GLWindow与NEWT KeyListener一起使用,或者将AWT GLCanvas与AWT KeyListener一起使用,或者使用NewtCanvasAWT。最后,在编写您自己的示例之前,请尝试了解它的工作原理