2017-04-25 5 views
0


Was ich will?
Um so schnell wie möglich zwischen 2 Hintergrundfarbe (sagen wir weiß und rot) um spezifischer zu sein, möchte ich den Bildschirm immer weiß und für 1 Rahmen (das hat so kurz) rot sein, sagen wir 500ms
Was ich weiß?
Nun, nicht viel, ich bin auf der Suche alle so einfaches Beispiel Tag, aber alles, was ich im Vergleich zu so komplex finden können, was ich will, so dass jede einfach Tutorial mit einem Lächeln angenommen :)
Warum ich verwende DirectX?
Ich habe versucht, es auf OpenGL ohne Erfolg zu tun und here jemand sagte mir, ich sollte this verwenden, aber ich weiß nicht wie und konnte nicht finden, wo ich lernen ... Die Version des DX ist nicht wichtig zu ich, ich brauche es nur so schnell wie möglich sein ..
Also, ich hoffe, dass Sie mir helfen, trotzdem danke :)So wechseln Sie zwischen Hintergrundfarben in DirectX

UPDATE: NOCH KEINE ANTWORT ERHALTEN

Antwort

1

ich mache ein Angebot, von dem ich hoffe, dass es Ihnen helfen kann. versuchen Sie diese Schritte:

#include <windows.h> 
#include <windowsx.h> 
#include <d3d9.h> 

umfassen die Direct3D-Library-Datei:

#pragma comment (lib, "d3d9.lib") 

fügen Sie dann folgenden Codes zu:

die grundlegenden Windows-Header-Dateien und die Direct3D-Header-Datei

// global declarations 
LPDIRECT3D9 d3d; // the pointer to our Direct3D interface 
LPDIRECT3DDEVICE9 d3ddev; // the pointer to the device class 

// function prototypes 
void initD3D(HWND hWnd); // sets up and initializes Direct3D 
void render_frame(void); // renders a single frame 
void cleanD3D(void); // closes Direct3D and releases memory 

// the WindowProc function prototype 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam); 


// the entry point for any Windows program 
int WINAPI WinMain(HINSTANCE hInstance, 
        HINSTANCE hPrevInstance, 
        LPSTR lpCmdLine, 
        int nCmdShow) 
{ 
    HWND hWnd; 
    WNDCLASSEX wc; 

    ZeroMemory(&wc, sizeof(WNDCLASSEX)); 

    wc.cbSize = sizeof(WNDCLASSEX); 
    wc.style = CS_HREDRAW | CS_VREDRAW; 
    wc.lpfnWndProc = (WNDPROC)WindowProc; 
    wc.hInstance = hInstance; 
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH)COLOR_WINDOW; 
    wc.lpszClassName = L"WindowClass"; 

    RegisterClassEx(&wc); 

    hWnd = CreateWindowEx(NULL, 
          L"WindowClass", 
          L"Our First Direct3D Program", 
          WS_OVERLAPPEDWINDOW, 
          300, 300, 
          640, 480, 
          NULL, 
          NULL, 
          hInstance, 
          NULL); 

    ShowWindow(hWnd, nCmdShow); 

    // set up and initialize Direct3D 
    initD3D(hWnd); 

    // enter the main loop: 

    MSG msg; 

    while(TRUE) 
    { 
     DWORD starting_point = GetTickCount(); 

     if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 
     { 
      if (msg.message == WM_QUIT) 
       break; 

      TranslateMessage(&msg); 
      DispatchMessage(&msg); 
     } 

     render_frame(); 

     while ((GetTickCount() - starting_point) < 25); 
    } 

    // clean up DirectX and COM 
    cleanD3D(); 

    return msg.wParam; 
} 

// this is the main message handler for the program 
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    switch(message) 
    { 
     case WM_DESTROY: 
      { 
       PostQuitMessage(0); 
       return 0; 
      } break; 
    } 

    return DefWindowProc (hWnd, message, wParam, lParam); 
} 

// this function initializes and prepares Direct3D for use 
void initD3D(HWND hWnd) 
{ 
    d3d = Direct3DCreate9(D3D_SDK_VERSION); // create the Direct3D interface 

    D3DPRESENT_PARAMETERS d3dpp; // create a struct to hold various device information 

    ZeroMemory(&d3dpp, sizeof(d3dpp)); // clear out the struct for use 
    d3dpp.Windowed = TRUE; // program windowed, not fullscreen 
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; // discard old frames 
    d3dpp.hDeviceWindow = hWnd; // set the window to be used by Direct3D 


    // create a device class using this information and the info from the d3dpp stuct 
    d3d->CreateDevice(D3DADAPTER_DEFAULT, 
         D3DDEVTYPE_HAL, 
         hWnd, 
         D3DCREATE_SOFTWARE_VERTEXPROCESSING, 
         &d3dpp, 
         &d3ddev); 

    return; 
} 

// this is the function used to render a single frame 
void render_frame(void) 
{ 
    d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0, 40, 100), 1.0f, 0); 

    d3ddev->BeginScene(); // begins the 3D scene 

    // do 3D rendering here 

    d3ddev->EndScene(); // ends the 3D scene 

    d3ddev->Present(NULL, NULL, NULL, NULL); // displays the created frame on the screen 

    return; 
} 

// this is the function that cleans up Direct3D and COM 
void cleanD3D(void) 
{ 
    d3ddev->Release(); // close and release the 3D device 
    d3d->Release(); // close and release Direct3D 

    return; 
} 
+0

Vielen Dank für Ihre Antwort! aber ich sehe nur einen blauen Bildschirm, wie kann ich überprüfen, dass 1 Rahmen rot war? Normalerweise verwende ich 'Sleep (500)', bevor ich zur ursprünglichen Nummer zurückkehre, aber hier verstehe ich nicht, wo ich sie hinstellen muss. – Hido

+0

@Peewe einen Blick auf diese [link] (https://www.gamedev.net/topic/519829-changing-background-color-during-runtime/) –

+0

Alles, was ich tun musste, ist auf dem 'render_frame aufrufen 'Ein anderes Mal. Vielen Dank! – Hido