1

私の問題は、ウィンドウ内のピクセルを取得することです。これを行う方法が見つかりません。標準の Windows 関数と Direct2D (DirectDraw ではない) を使用しています。新しいウィンドウの標準的な初期化を使用しています:

WNDCLASS wc;
wc.style = CS_OWNDC; 
wc.lpfnWndProc = WndProc; 
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW); wc.hbrBackground = (HBRUSH)(6);   
wc.lpszMenuName = 0;
wc.lpszClassName = L"WINDOW"; RegisterClass(&wc); 
hWnd = CreateWindow(L"WINDOW", L"Game", WS_OVERLAPPEDWINDOW,100,100,1024,768,NULL,NULL,hInstance,NULL);

次に、D2D1factoryオブジェクトを作成し、ウィンドウにビットマップを描画します。

HWND hWnd = NULL;
srand((unsigned int)time((time_t)NULL));

ID2D1Factory* factory = NULL;
ID2D1HwndRenderTarget* rt = NULL;
CoInitializeEx(NULL,COINIT_MULTITHREADED);
My_CreateWindow(&hWnd, hInstance);
My_CreateFactory(&hWnd, factory, rt);
D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED,&factory);

factory->CreateHwndRenderTarget(RenderTargetProperties(), HwndRenderTargetProperties(hWnd,SizeU(800,600)), &rt);

// tons of code

rt->BeginDraw(); rt->DrawBitmap(background[0], RectF(0,0,800,600));
rt->DrawBitmap(GIFHorse[(int)iterator],
RectF(0+MyX-100,0+MyY-100,100+MyX,100+MyY));
rt->DrawBitmap(Star[(int)iterator], RectF(0 + starX, 0 + starY, 50 + starX, 50+starY)); rt->EndDraw();

ヒット数を計算する必要があります (単純なゲームを作成しようとしています)。そのため、ウィンドウ内のすべてのピクセルにアクセスする必要があります。

他のアルゴリズムも考えていますが、作るのが難しいのでもっと簡単なものから始めたいと思っています。

関数については知っていGetPixel()ますが、何に使用すればよいかわかりませんHDC

4

1 に答える 1

0

D2D ピクセルに到達する簡単で簡単な方法はありません。

ジオメトリを使用して簡単な衝突検出を実装できます。オブジェクトにオブジェクトのアウトラインがある場合は、ID2D1Geometryを使用してそれらを比較できますID2D1Geometry::CompareWithGeometry

ピクセルを主張する場合、それらにアクセスする方法は、DC取得可能な経由ですIDXGISurface1::GetDC

この場合、hwnd レンダー ターゲットの代わりに、DXGI サーフェイス レンダー ターゲットとスワップ チェーンを使用する必要があります。

ステップバイステップ:

  1. D3D11CreateDeviceAndSwapChainスワップチェーンを提供します。
  2. IDXGISwapChain::GetBufferDXGI サーフェスを提供します。
  3. ID2D1Factory::CreateDxgiSurfaceRenderTargetレンダー ターゲットを提供します。
  4. IDXGISurface1::GetDCDCを提供します。このページの注意事項を読んでください!
于 2014-05-16T18:54:53.493 に答える