2012-03-10 15 views
0

私はOpenGLでパックマンゲームを作っています。マトリックスで表されるゲームでパックマンを移動したいと思います。C++/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 
} 

パックマンそれはbeeingが消去されていません。私は次に何をする必要があるのか​​教えてください。間違っているのですか?

+0

移動するときにパックマンを削除する理由がわかりません。もちろん、同じPacmanオブジェクト上で、pacman-> setPacX()とpacman-> setPacY()だけを使うべきでしょうか? – Robinson

+0

私はそれを翻訳することができなかったので、私はそれを削除しようとしました...私はそれを翻訳すると、単純に別のパックマンを作成します... – gn66

答えて

2

->演算子をクラスポインタとともに使用します。

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

は次のようになります。

pacman->movePacman(n,m); 

新しいものを追加する前に画面を再描画してみてください、それ以前のパックマンを消去します。また、パックマンデストラクタは、内部的にパックマンのイメージ/スプライトのレンダリングも終了しますか?

+0

私は球体としてpacmanを定義しました。私の最初のC++プロジェクトですが、以前はjavaとcで作業していたので、デストラクタを使って作業する方法はよくわかりません。私はそのデストラクタを読んでメモリの割り当てを解放しますが、それをよく理解していないので、私はそれを無効にしました。 – gn66

+0

画面を再描画するには、これを行うより良い方法は、新しいものを作成して古いものを代用することです。 – gn66

+0

良いアドバイスがありますが、これは手元の問題である画面を再描画する方法(downvoteなし、コメントのみ)の質問には答えません。 – ssube

4

パックマンそれはbeeing erasedではありません。私は次に何をする必要があるのか​​教えてください。間違っているのですか?

OpenGLはシーングラフではありません(これはほぼすべての回答で明らかです)。これは、ダンシーポイント、線、三角形を描画するための描画APIです。 「幾何学的オブジェクト」という概念はありません。

変更した場合:古い画像を消去して新しい画像を作成します。

+0

私はそれを消去しようとするが、それは動作していない...私のパックマンクラス、コンストラクタは、xとyの座標、速度とパックマンの人生を保存します。そして、パックマンのクラスでは、パックマン(基本的には球)を描く関数を持っています。問題は、私が呼び出したときです:pacman-> draw();それは新しいパックマンを描画しますが、古いものを消去しません – gn66

+1

OpenGLで作成された描画をクリアするには 'glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);を呼び出します。 – datenwolf

関連する問題