私はクラスを持っています:
class Mouse
{
public:
int x;
int y;
void MouseMove( int x, int y );
Mouse();
};
WndProc および WinMain 関数を含む windows.cpp のヘッダー ファイルとしてインクルードします。そのインクルードのすぐ下で、マウスの静的インスタンスを宣言します。
#include "Mouse.h"
#include "Game.h"
static Mouse mouse;
私のマウスメソッドは次のようになります:
#include "Mouse.h"
void Mouse::MouseMove( int x, int y )
{
this->x = x;
this->y = y;
}
私の WndProc では、WM_MOUSEMOUSE を処理し、x 値と y 値を渡しています (これらの値は、MouseMove 関数に渡されます)。
case WM_MOUSEMOVE:
{
int x = ( short )LOWORD( lParam );
int y = ( short )HIWORD( lParam );
bool leftButtonDown = wParam & MK_LBUTTON;
bool rightButtonDown = wParam & MK_RBUTTON;
mouse.MouseMove( x, y );
}
break;
私の MouseMove 関数が実行され、 this->x を x に正常に設定し、y 値と同じになります。これですべてです...完了です。
今、私の Windows ループで私は自分のゲーム (theGame.Go) を実行しています:
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();
}
}
私のゲームのヘッダーは次のようになります。
#include "Mouse.h"
class Game
{
public:
Game( HWND hWnd );
~Game();
void Go();
void ComposeFrame();
LPD3DXSPRITE sprite;
LPDIRECT3DTEXTURE9 gTexture;
D3DXVECTOR3 pos;
private:
D3DGraphics gfx;
};
私のゲームの構成は次のようになります。
Game::Game( HWND hWnd )
:
gfx( hWnd )
{
HRESULT result;
sprite = NULL;
result = D3DXCreateSprite( gfx.d3dDevice, &sprite );
assert( !FAILED( result ) );
gTexture = NULL;
result = D3DXCreateTextureFromFile( gfx.d3dDevice, "Images/character001.png", &gTexture );
assert( !FAILED( result ) );
gfx.d3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE);
};
ゲーム オブジェクトは、windows.cpp で宣言されているマウス オブジェクトが、そこでグローバルに宣言されているにもかかわらず、存在することを認識していません。そこで、Game オブジェクトへの参照によってマウス オブジェクトを渡す必要があると考えました。Windows ループを次のように変更することから始めます。
Game theGame = Game( hWnd, &mouse );
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.h クラスに追加して、メモリへの参照を取得し、後でそこから *mouse.x を取得できるようにします...:
class Game
{
public:
Game( HWND hWnd, Mouse &mouse );
...
戻って Windows ループを確認すると、呼び出しの下に波線が表示されます。
Game theGame = Game( hWnd, &mouse );
それは次のように述べています:
6 IntelliSense: no instance of constructor "Game::Game" matches the argument list
argument types are: (HWND, Mouse *) c:\Users\James\Documents\Visual Studio 2012\Projects\Game\Game\Windows.cpp 75 17 Game
理解できません?いったいどうやって、マウスの 1 つのグローバル インスタンスを変更し、それを私のゲーム オブジェクト内から呼び出すのでしょうか :(