2012-03-10 6 views
0

나는 OpenGL에서 Pacman 게임을 만들고 있고, 매트릭스로 표현 된 게임에서 팩맨을 움직이기를 원한다.어떻게 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 
} 

Pacman 그것은 지워지지 않았다. 다음에해야 할 일이 무엇인지 말해 줄 수 있습니까?

+0

왜 팩맨을 옮길 때 팩맨을 삭제하는지 이해가 안됩니다. 반드시 같은 Pacman 객체에서 pacman-> setPacX() 및 pacman-> setPacY() 만 사용해야합니까? – Robinson

+0

번역 할 수 없기 때문에 나는 그것을 삭제하려고했습니다 ... 번역 할 때 그는 간단하게 다른 팩맨을 만듭니다 ... – gn66

답변

2

-> 연산자를 클래스 포인터와 함께 사용하십시오.

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

은 다음과 같아야합니다

pacman->movePacman(n,m); 

는 이전 팩맨을 지우고 새로운 하나를 추가하기 전에 화면을 다시 그리는 시도하십시오. 또한 팩맨 소멸자는 내부적으로 팩맨 이미지/스프라이트의 렌더링을 종료합니까?

+0

나는 팩맨을 구체로 정의했습니다. 그것은 C + +에서 내 첫 번째 프로젝트, 전 잘 자바와 C와 함께 일한 이후 소멸자와 함께 작동하는 방법을 잘 모릅니다. 그 소멸자는 메모리 할당을 자유롭게 읽었지만, 잘 이해하지 못하기 때문에 나는 그것을 무효화시켰다. – gn66

+0

화면을 다시 그릴 수있는 더 좋은 방법은 이전 하나를위한 새로운 및 subtitute을 만드는 것입니다? – gn66

+0

좋은 조언이 있지만, 이것은 손으로 문제가되는 화면을 다시 그리는 방법에 대한 질문에 대답하지 않습니다 (하향 형 (no downvote), 단지 코멘트). – ssube

4

팩맨 그것은 지워지지 않습니다. 다음에해야 할 일이 무엇인지 말해 줄 수 있습니까?

OpenGL은 장면 그래프가 아닙니다 (이것은 거의 모든 답변에서 분명히 드러납니다). 이것은 드로잉 API로, 넌씨 포인트, 선 및 삼각형을 그릴 수 있습니다. "기하학 물체"에 대한 개념은 없습니다.

변경 한 경우 : 이전 사진을 지우고 새 사진을 그립니다.

+0

지우려고하지만 작동하지 않습니다 ... 팩맨 클래스, 생성자가 x 및 y 좌표, 속도 및 팩맨의 수명을 저장합니다. 팩맨 클래스에는 팩맨 (기본적으로 구)을 그리는 함수가 있습니다. 문제는 내가 전화 할 때이다 : pacman-> draw(); 새로운 팩맨을 그으나 오래된 것을 지우지 마십시오 – gn66

+1

OpenGL을 사용하여 만든 그림을 지우려면'glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); – datenwolf

관련 문제