如何将 c++/opengl 中的对象移动到新位置并擦除旧对象

Posted

技术标签:

【中文标题】如何将 c++/opengl 中的对象移动到新位置并擦除旧对象【英文标题】:How do I move an object in c++/opengl to a new place and erase the old object 【发布时间】:2012-03-10 17:29:21 【问题描述】:

我正在用 opengl 制作吃豆人游戏,我想在由矩阵表示的游戏中移动我的吃豆人。

矩阵有 16x16,当我想绘制墙壁时,我放了 4 个,小球体放了 3 个,吃豆人放了 2 个。

在我项目的主类中,我从键盘读取一个键并将信息发送到我定义游戏的类。在那个班级我有这个功能:

void boardGame::refreshPacman(int n, int m)


    int x, y;


    (* pacman).movePacman(n, m); // This is working, it send information to class Pacman. In there I store the n (x axe) and m(y axe), and i get the next coordinates where pacman should translate.


    x = (* pacman).getPacX(); // get coordinate of the old pacman
    y = (* pacman).getPacY(); // get coordinate of the old pacman

    board[x][y] = 0; // delete old information of pacman in matrix 

    x += n; // set the coordinates of x axis for new pacman
    y += m; // set the coordinates of y axis for new pacman

    wall[x][y] = 2; // insert the information of new pacman in matrix

    pac->redraw (x, y, 0.5); // construct the new pacman

Pacman 它没有被删除。你能告诉我接下来我需要做什么,我做错了什么吗?

【问题讨论】:

我不明白你为什么在移动 pacman 时要删除它。当然你应该只在同一个 Pacman 对象上使用 pacman->setPacX() 和 pacman->setPacY()? 我试图删除它,因为我无法翻译它......当我翻译它时,他简单地创建了另一个吃豆人...... 【参考方案1】:

Pacman 它没有被删除。你能告诉我接下来我需要做什么,我做错了什么吗?

OpenGL 不是场景图(这显然是我在几乎每个答案中都会做出的一个陈述)。它是一个绘图 API,允许您绘制点、线和三角形。没有“几何对象”的概念。

如果你改变了什么:清除旧图并绘制新图!

【讨论】:

我试图擦除它,但它不起作用...我的 pacman 类,构造函数保存 x 和 y 坐标,速度和 pacman 的生命。在 pacman 的课程中​​,我有一个绘制 pacman(基本上是球体)的函数。问题是当我调用: pacman->draw();它会绘制新的 pacman,但不会删除旧的 清除使用 OpenGL 创建的绘图调用 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);【参考方案2】:

-> 运算符与类指针一起使用。

(* pacman).movePacman(n, m); 

应该是:

pacman->movePacman(n,m);

要删除早期的 pacman,请在添加新的 pacman 之前尝试重绘屏幕。另外,pacman 析构函数内部是否也结束了 pacman 图像/精灵的渲染?

【讨论】:

我将 pacman 定义为一个球体。这是我在 c++ 中的第一个项目,我不太清楚如何使用析构函数,因为我之前只使用过 java 和 c。我读到析构函数释放了内存分配,但由于我不太了解它,所以我把它留作空。 重绘屏幕,更好的方法是创建一个新的替代旧的? 虽然建议不错,但这并不能回答如何重绘屏幕的问题,这是当前的问题(没有反对意见,只是评论)。

以上是关于如何将 c++/opengl 中的对象移动到新位置并擦除旧对象的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL - 如何跟踪移动的物体? [关闭]

如何在多维数组/网格c ++中创建List

在opengl中,如何将鼠标跟随更改为鼠标单击、拖动和释放?

将 tr 按索引移动到新位置

如何使用 AS3 使 scrollPane 内的 MovieClip 移动到新位置?

C ++ opengl在glTranslatef之后获得新的顶点位置