我有一堂课:
class Mouse
{
public:
int x;
int y;
void MouseMove( int x, int y );
Mouse();
};
我将它作为头文件包含到我的 windows.cpp 中,其中包含 WndProc 和 WinMain 函数。就在它的下面,我声明了我的鼠标的一个静态实例:
#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
我不明白?我到底如何只更改鼠标的一个全局实例并从我该死的游戏对象中调用它:(