如何在glut C ++中获得游戏的流畅输入?

时间:2020-05-18 17:07:37

标签: c++ glut

我如何使我的C ++过量项目具有平滑的输入? 我获得输入的唯一方法是稍有延迟,这很烦人。我不熟悉C ++,所以请帮助我。

#include <windows.h>
#include <GL/glut.h>
#include <GL/glu.h>
#include <stdio.h>

#include <iostream>

GLboolean upPressed = false;

using namespace std;

void display();
void reshape(int,int);
void timer(int);
void keyboard_callback(int, int, int);
void SpecialKeysUp(int, int, int);
void update();

void init()
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
}

int main(int argc, char**argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);

    glutInitWindowPosition(200, 100);
    glutInitWindowSize(500, 500);

    glutCreateWindow("window");

    glutSpecialFunc(keyboard_callback);

    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutTimerFunc(0,timer,0);
    glutSpecialUpFunc(SpecialKeysUp);
    glutIdleFunc(update);
    init();

    glutMainLoop();
}

// sy is the first squares y position. no x value needed since the x value is static.
// also note that the "s" in sy stands for square, squarey_position
float x_position = 0.0;
float sy_position = -4.0;
int state = 1;
char input;

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity();

    glBegin(GL_QUADS);

    glColor3f(1.0,0.0,0.0);
    glVertex2f(x_position,1.0);
    glVertex2f(x_position,-1.0);
    glVertex2f(x_position+2.0,-1.0);
    glVertex2f(x_position+2.0,1.0);

    glColor3f(1.0,0.0,0.0);
    glVertex2f(-8.0,sy_position);
    glVertex2f(-9.0,sy_position);
    glVertex2f(-9.0,sy_position+8.0);
    glVertex2f(-8.0,sy_position+8.0);

    glEnd();

    glutSwapBuffers();
}

void reshape(int w,int h)
{
    glViewport(0,0,(GLsizei)w,(GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-10, 10, -10, 10);
    glMatrixMode(GL_MODELVIEW);

}

void timer(int)
{
    glutPostRedisplay();
    glutTimerFunc(1000/60,timer,0);

    switch(state)
    {
    case 1:
        if(x_position<8)
            x_position+=0.15;
        else
            state = -1;
        break;
    case -1:
        if(x_position>-10)
            x_position-=0.15;
        else
            state=1;
        break;
    }
}

void keyboard_callback(int key, int, int)
{
    if(GLUT_KEY_UP == key)
        upPressed = true;
}

void SpecialKeysUp(int key, int, int)
{
    if(GLUT_KEY_UP == key)
        upPressed = false;
}

void update()
{
//    glutPostRedisplay();
//    glutTimerFunc(1000/60,update,0);
    if(upPressed)
        sy_position+=0.15;
}

这是一个乒乓球游戏,当前的球运转良好,但是我试图为矩形获得平滑的输入,但是我唯一的方法就是输入延迟。

我是glut C ++的新手,请帮助我

1 个答案:

答案 0 :(得分:0)

实际上,我知道了该怎么做。 glutTimerFunc每1000/60毫秒更新和重置一次,因此在按下向上键的同时将布尔值评估为“ true”(使用GLUT_KEY_UP),然后在未按下键的情况下将布尔值评估为“ false”(使用SpecialUpFunc)可以输入信号更流畅,因为更新功能重置的速度必须比按住键更快。

相关问题