0

DirectXプロジェクトを提供しました:http ://www.planetchili.net/forum/download/file.php?id = 830

それは単純なものでなければなりませんが、問題がどこにあるのかを見つけるのに十分なAPIをよく知りません...

私は以下が役立つと思います:

class D3DGraphics
{
public:
    D3DGraphics( HWND hWnd );
    ~D3DGraphics();

    void Begin();
    void End();
    void Present();

    LPDIRECT3D9 d3dObject;
    LPDIRECT3DDEVICE9 d3dDevice;
    D3DPRESENT_PARAMETERS presParams;
    HRESULT hr;
};

オブジェクトとデバイスを起動するD3DGraphicsクラスを宣言します。

D3DGraphics::D3DGraphics( HWND hWnd )
    :
    d3dObject( NULL ),
    d3dDevice( NULL )
{
    ZeroMemory( &presParams, sizeof( presParams ) );
    presParams.Windowed=TRUE;
    presParams.SwapEffect=D3DSWAPEFFECT_DISCARD;
    presParams.BackBufferFormat=D3DFMT_UNKNOWN;
    presParams.PresentationInterval=D3DPRESENT_INTERVAL_ONE;

    d3dObject = Direct3DCreate9( D3D_SDK_VERSION );
    hr = d3dObject->CreateDevice(
        D3DADAPTER_DEFAULT,
        D3DDEVTYPE_HAL,
        hWnd, 
        D3DCREATE_HARDWARE_VERTEXPROCESSING, 
        &presParams, 
        &d3dDevice
    );
};

私のWindowsAPIは、コンストラクターが宣言された、作成したGameクラスのインスタンスを作成しています。

HWND hWnd = CreateWindow("MyWindowClass", "Pubes", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
Game theGame = Game( hWnd );

MSG msg;
ZeroMemory( &msg, sizeof(msg) );

while( msg.message!=WM_QUIT )
{
   if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
   {
      TranslateMessage( &msg );
      DispatchMessage( &msg );
   }
   else
   {
      theGame.Go();
   }
}

そして最後に、コードの最初のブロックで言及されているスプライトを作成できないため、コンストラクターをいじくり回している私のゲームクラスがあります。これは完全です。

Game::Game( HWND hWnd )
    :
    gfx( hWnd )
{
    sprite = NULL;

    if ( SUCCEEDED( D3DXCreateSprite( gfx.d3dDevice, &sprite ) ) )
    {
          // returns s_OK           
    }   

    pos.x=10.0f;
    pos.y=20.0f;
    pos.z=0.0f;

    gTexture = NULL;

    if ( SUCCEEDED( D3DXCreateTextureFromFile( gfx.d3dDevice, "Images/character001.png", &gTexture ) ) )        
      {
          // returns s_OK           
    }       

gfx.d3dDevice-> SetRenderState(D3DRS_ALPHABLENDENABLE、TRUE); };

Game::~Game()
{
    sprite->Release();
    gTexture->Release(); 
};

void Game::Go()
{
    gfx.Begin();
    ComposeFrame();
    gfx.Present();
    gfx.End();
};

gfxは、私のGameクラスヘッダーで宣言されたD3DGraphicsのインスタンスです。

おやおや、あなたたちは私のスプライトがまったくレンダリングされていない理由について何か考えを持っていますか?

//追記:これは出力に含まれていますが、これは何か関係がある可能性がありますか?

ウィンドウへのハンドルを含むhWnd変数:

HWND hWnd = CreateWindow("MyWindowClass", "Pubes", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
    Game theGame = Game( hWnd );

言う:

-       hWnd    0x000e0682 {unused=??? }    HWND__ *
        unused  <Unable to read memory> 
4

1 に答える 1

0
gfx.Begin();
ComposeFrame();
gfx.End();
gfx.Present();

シーンを終了する前に発表していました!!!

YIPEEEE

于 2013-03-20T13:20:05.380 に答える