如何让glut C++中的游戏有流畅的输入?

问题描述 投票:0回答:1

如何让我的C++ glut项目有流畅的输入,我唯一能得到输入的方法是有一点延迟,这很烦人。我对C++ glut是个新手,所以请帮帮我。

#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++,所以请帮助我。

c++ glut
1个回答
0
投票

其实我已经知道怎么做了。glutTimerFunc每100060毫秒更新和重置一次,所以在按下上键时将一个布尔值设为 "true"(用GLUT_KEY_UP),然后在未按下键时将一个布尔值设为 "false"(用SpecialUpFunc),这样可以使输入更平滑,因为更新函数的重置速度一定比按住键快。

© www.soinside.com 2019 - 2024. All rights reserved.