Альтернатива глобальным переменным - GLUT C - PullRequest
0 голосов
/ 12 февраля 2020

Я играю в игру Dino Race на C (не в C ++) и использую GLUT для графики. У меня проблемы, потому что мне нужно получить доступ к позиции «x» чертежа из Display () fun c и функции, которая его перемещает. Я не могу использовать глобальные переменные, так что я могу сделать?

1 Ответ

0 голосов
/ 13 февраля 2020

При использовании glut, у вас действительно нет другого выбора, кроме как использовать глобальные переменные. Какая-то отстой, но у тебя это есть. Если вы действительно хотите, вы можете упаковать переменные в класс, что-то вроде этого ...

class MyGame
{
public:
  MyGame(int argc, char* argv[])
  {
    assert(g_game);
    glutInit(&argc, argv);

    // do all the usual glutCreateWindow / glutInitDisplayMode stuff here 

    // attach to the static glut_draw method (which will call draw)
    glutDisplayFunc(glut_draw);
    glutMainLoop();
  }

  void draw();

private:

  /* put your data here */ 

private:
  static MyGame* g_game; //< a single global pointer to your game
  static void glut_draw();
};


MyGame* MyGame::g_game = 0;

MyGame::MyGame(int argc, char* argv[])
{
  assert(g_game);
  glutInit(&argc, argv);

  /* do all the usual glutCreateWindow / glutInitDisplayMode stuff here */

  // attach the 
  glutDisplayFunc(glut_draw);
  glutMainLoop();
}

// use this static method to thunk into the member function draw()
void MyGame::glut_draw()
{
  g_game->draw();
}

void MyGame::draw()
{
  glClear(GL_COLOR_BUFFER_BIT);

  // you now have access to all the member variables of the MyGame class.

  glutSwapBuffers();
}

Для бонусных баллов вы можете объявить draw () как виртуальный и скрыть все перенасыщение в базовом классе.

...