【发布时间】:2016-03-20 14:47:12
【问题描述】:
我正在编写一个 2D 小游戏,我想实现一个相机,当他移动时跟随角色。 不幸的是,当我移动角色时,我的实现结果是黑屏......如果你知道我的错误在哪里,你能帮助我吗?我是openGl的新手。
这是我的主要代码:
int main(int argc, char** argv) {
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(300, 350);
glutCreateWindow("Map");
init();
glutDisplayFunc(drawMap);
glutSpecialFunc(specialkeyboard);
glutIdleFunc(moveObjects);
glutMainLoop();
return 0;
}
绘制地图的函数: 无效的绘图() {
//int x=0;
//Initialisation
glClear (GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluOrtho2D(0.0,500.0,0.0,500.0);
glViewport(0,0,1000,700);
// drawing the rest of the map //
这里是相机代码,我认为问题来自相机功能。
void camera() {
float left = C.x - (300/2.0);
float bottom = C.y - (350/2.0);
float right = left + 300;
float top = bottom + 350;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(left, right, bottom, top);
glMatrixMode(GL_MODELVIEW);
}
还有特殊键盘功能:
void specialkeyboard(int key, int x, int y)
{
switch (key) {
case GLUT_KEY_UP:
C.y += 2;
camera();
break;
case GLUT_KEY_DOWN:
C.y -= 2;
camera();
break;
case GLUT_KEY_RIGHT:
C.x += 2;
camera();
break;
case GLUT_KEY_LEFT:
C.x -= 2;
camera();
break;
}
glutPostRedisplay();
}
非常感谢您的帮助:)
编辑
所以现在的问题是地图向错误的方向移动,它与角色一起移动但没有跟随他。 (红圈是人物)
主要代码:
int main(int argc, char** argv) {
glutInit (&argc, argv);
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(500, 700);
glutCreateWindow("Map");
init();
glutDisplayFunc(drawMap);
glutSpecialFunc(specialkeyboard);
glutIdleFunc(moveObjects);
glutMainLoop();
return 0;
}
绘制地图:
void drawMap()
{
std::cout << "Debut Drawmap " << std::endl;
//TRY
glClear (GL_COLOR_BUFFER_BIT);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluOrtho2D(0.0,500.0,0.0,500.0);
glMatrixMode (GL_MODELVIEW);
glLoadIdentity ();
}
//drawing the map//
// Red circle
C.DrawCircle();
camera();
glutSwapBuffers ();
std::cout << "Fin drawmap " << std::endl;
}
还有相机:
void camera(){
glViewport(C.x,0,1000,700);
}
【问题讨论】: