我有一個類:混淆自己與指針和引用,C++(從WinAPI的入門鼠標COORDS)
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功能貫穿而設置這個 - > X成功x和同一個Wi y值。這一切都完成了。
現在,在我的窗戶循環我正在我的遊戲(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);
...
我回去看看我的窗戶循環,並有一個波浪下我的電話:
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
我不明白嗎?我怎麼改變我的鼠標的一個全局實例,並從我該死的內部調用它遊戲對象:(
我已經完成了這個鼠標*鼠標...和我的遊戲方法以外的構造函數不能看到這個對象,所以我在我的Game.h中聲明瞭一個鼠標鼠標,然後將構造函數默認值設置爲鼠標(鼠標)我的intellisense關閉它的pube看起來很小,但mouse.x和y仍然沒有通過,不管我現在的事實如何有一個類的本地版本呢? – Jimmyt1988 2013-03-20 23:57:20
HANGON,完成它:D yahooooo ... – Jimmyt1988 2013-03-21 00:01:12
我現在設法改變它,所以在我的Windows循環中我稱之爲遊戲theGame(hWnd,鼠標);然後我在我的遊戲構造參數中收到一個參考。這個工程也很棒! – Jimmyt1988 2013-03-21 00:11:13