添加动态对象

时间:2015-10-19 15:36:04

标签: c++ opengl glut dynamically-generated

我正在实施一个pacman游戏。一个条件是你必须在运行时添加或删除敌人(在播放时)。我的想法是当你按下' +'每次按下' - '。

时删除幽灵

我使用opengl绘制迷宫和角色。我不知道如何制作一个新鬼();或删除ghost();每次按下上面提到的按键。

也许另一种解决方案是鬼魂的矢量或地图。但是用户不会给出任何名字或任何东西......

我的伪代码:

#define MOVE 1
#define QUIET 2

class particle {

protected: //Antes era publica

  float x,y;   //-- Current position
  float vx,vy; //-- Velocity vector
  int state;

  long time_remaining;

public:

  particle();
  void set_position(int x,int y);
  void init_movement(int destination_x,int destination_y,int duration);
  void integrate(long t);
  void draw();
  virtual ~particle();
};
#endif /* PARTICLE_H_ */

Ghost将是粒子的继承类。

我使用以下代码控制游戏窗口中的键盘输入(我输入了一些代码来获取想法):

glutDisplayFunc(display);

     //TO-DO : COMMENT
     glutKeyboardFunc(keyboard);


     glutSpecialFunc(specialkeyboard);

最后,当游戏玩家按下按键' +'在游戏中添加幽灵......

void specialkeyboard(int key,int x,int y)
{

    switch(key)
    {
    case GLUT_KEY_UP:
            //Pacman moves up
            goNorth();
            //square.set_position(300,300);
            //square.init_movement(300,500,1000);
            break;
    case GLUT_KEY_DOWN:
            //Pacman moves down
        //  square.set_position(300,300);
        //  square.init_movement(300,100,1000);
            goSouth();
            break;
    case GLUT_KEY_LEFT:
            //Pacman moves to the left
            goEast();
            break;
    case GLUT_KEY_RIGHT:
            goWest();
            //square.set_position(300,300);
            //square.init_movement(500,300,1000);
            break;
    case '+':
          //generate new ghost some kind of ( add ghost to the game)
          new ghost();
          break;
    case '-':
              //kill or remove ghost from the game
              delete ghost;
              break;

        }

  glutPostRedisplay();
}

使用Eclipse和C ++进行编程。

2 个答案:

答案 0 :(得分:3)

  

也许另一个解决方案是鬼魂的矢量或地图

完全。

  

但是用户不会给出任何名字或任何东西......

从什么时候开始需要push_backvector的名称?

当然,在这种情况下我不会使用指针;只需按或弹出一个值。如果您真的想使用指针,请不要使用原始指针和new / delete; vectorset std::unique_ptr<your_type>将是更好的选择。

答案 1 :(得分:2)

不要new你的鬼魂。有一个ghost个对象的向量,每次你想让玩家的生活变得更加艰难时,push_back就是向量的一个条目。当&#39; - &#39;按下,你只需从矢量pop_back(只需确保在弹出之前你至少有一个元素)。