如何将 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中,如何将鼠标跟随更改为鼠标单击、拖动和释放?