2013-03-25 1 views
1

저는 몇 년 동안 기본 및 중간 수준의 C++ 프로그램을 작성해 왔지만 그 이상으로 나아갈 수 없었습니다. 최근에 www.planetchili.net에서 얻은 Framework을 통해 DirectX에서 작업하는 방법에 대해 배웠습니다. 나는 인공 지능과 길 찾기를 보여줄 프로그래밍 클래스를위한 소행성 타입의 게임과 비슷한 것을 개발하려고하고있다. 소행성을 날려 버리는 대신에, 플레이어는 다른 삼각형의 배들과 싸우는 개가 될 것입니다.DirectX에 새로 추가 된 사용자 정의 클래스가 깨졌습니다

프레임 워크에는 대부분의 작업을 수행하는 데 사용 된 Game 개체가 포함되어 있습니다. 그러나 배를 그리거나 위치 및 점수와 같은 통계를 추적하는 것과 같은 배 관련 작업을 수행하는 데 필요한 변수가 포함 된 배에 대한 클래스를 직접 작성해야한다고 생각했습니다.

그러나 나는 개념 수준의 패러독스와 같은 문제를 겪고 있습니다. 이 프레임 워크는 D3Dgraphics라는 것을 사용하며 gfx라는 D3D 객체를 선언하고 사용합니다. Ship에서 D3D 드로잉 기능을 사용하기 위해 D3D 라이브러리를 포함하고 Ship.h에 D3D 객체를 만들었습니다.

게임에서 Ship 개체를 선언하고 인스턴스화 할 수 있지만 게임에서 직접 사용할 때 작동하는 그리기 기능은 ship 개체를 통해 사용할 때 작동하지 않습니다. 왜인지는 모르겠지만, 내가 만든이 고약한 웹 덕분이라고 생각합니다. Game 객체는 Go()라는 함수가있는 D3D 객체를 사용하여 프레임을 그리는 것처럼 보이며 Ship 객체는 D3D 객체를 사용하지만 Game의 Go() 메소드에 액세스 할 수 없으며 Game은 Ship을 사용합니다.

여기 제가 작성한 코드가 있습니다 ... 제발 나를 똑바로 세우십시오.

Ship.cpp 
    //Ship.cpp 
    #include "Ship.h" 
    #include <math.h> 
    enter code here 
    //Constructor 
    Ship::Ship(HWND hWnd) 
    : gfx (hWnd) 
    {} 
    void Ship::drawLine(int x1, int x2, int y1, int y2){ 
    //Draws a line using gfx.putPixel- This function works perfectly if declared and used directly in Game.cpp 
    } 

Ship.h 
    //Ship.h 
    #pragma once 

    #include "D3DGraphics.h" 
    #include "Keyboard.h" 
    #include <vector> 

    class Ship{ 
    private: 
     D3DGraphics gfx; 
    public: 
     Ship::Ship(HWND hWnd); //Default Constructor 
    }; 




//Game.h 
    #pragma once 
    #include "Ship.h" 
    #include "D3DGraphics.h" 
    #include "Keyboard.h" 

    class Game 
    { 
    public: 
     Game(HWND hWnd,const KeyboardServer& kServer); 
     void Go(); 
     //Member functions 
    private: 
     void ComposeFrame(); 

    private: 
     D3DGraphics gfx; 
     KeyboardClient kbd; 
     Ship psp; 
    }; 

//Game.cpp 
#include "Game.h" 
#include <math.h> 

Game::Game(HWND hWnd,const KeyboardServer& kServer) 
: gfx (hWnd), 
    psp(hWnd), 
    kbd(kServer) 
{} 

void Game::Go() 
{ 
    gfx.BeginFrame(); 
    ComposeFrame(); 
    gfx.EndFrame(); 
} 

void Game::ComposeFrame() 
{ 
    psp.drawShip(); 
} 
+0

:

약간의 보조 노트

, 일반적으로 사용되는 헝가리어 표기법을 사용하여 더 많은 정보를 제공 무언가에 변수 이름을 변경하려고합니다. 내 코드가 컴파일되고 psp.drawShip()이 코드에 의해 승인 된 것으로 보이지만 실행하면 아무런 변화가 없습니다. 가운데에 빨간색 방향 벡터가 그려지는 최소 및 경계 원형에 있어야하지만 창은 비어 있어야합니다. 게임에서 우주선 객체를 사용하려면 어떻게해야할지 모르겠습니다. –

+0

사용중인 프레임 워크에 익숙하지 않아도 도움을 줄 수 없습니다. 일반적인 문제를 추측하여':: Present'가 어딘가에 호출되도록하고 프레임 워크가 윈도우를 초기화하고 서페이스를 올바르게 렌더링 한 다음 좌표 및 꼭지점에서 기이함을 확인하도록 제안 할 수 있습니다. – ssube

답변

1

당신의 Game 클래스가 사용되는 D3DGraphics 객체는 ShipD3DGraphics 객체 메모리에서 다른 하나입니다. -

//Constructor 
     Ship::Ship(D3DGraphics *pGfx) 
     { 
      gfx = pGfx;  
     } 

-

Game::Game(HWND hWnd,const KeyboardServer& kServer) 
: gfx (hWnd), 
    psp(gfx), 
    kbd(kServer) 
{} 

대신을 gfx.을 사용하는

class Ship{ 
     private: 
      D3DGraphics *gfx; 
     public: 
      Ship::Ship(D3DGraphics *pGfx); //Default Constructor 
     }; 

을 : 당신은이 조각으로 변경, 같은 개체를 그리는 확인하기 위해 포인터를 사용해야합니다 Ship 클래스에 gfx->을 사용해야합니다. I.E. gfx.PutPixel() 대신 gfx->PutPixel() 아마 지정해야 http://en.wikipedia.org/wiki/Hungarian_notation

관련 문제