游戏开发之路

  • 最近即将大四,面临实习和就业的问题,学校只想尽快把我们推出去,却不管前方是刀山还是火海。
  • 如果没有梦想,去哪里都是流浪。
  • 如果怀有梦想,你是否迷茫?
  • 我不是985也不是211,我不想使用Unity或Unreal,明明什么都没有我却想做出惊艳的3A作品。
  • 但现在实现不了梦想没关系,十年后也许可以实现梦想,二十年后也许可以实现梦想。坚持的意义就是,总有一天,我会实现自己的梦想。
  • 如果你想学习游戏开发,可你还是小白,推荐一本书《筑梦之旅:Windows游戏编程从零开始》。最近我也在看这本书,还买了龙书,明天才到,真让人期待呀!
  • 今天学会了使用Windows API创建窗口。如果能回到过去,我会告诉自己:Windows平台是游戏市场中最大的平台,请你学习Windows API以创建游戏程序,请你学习DirectX以进行实时渲染,请你抱着独立开发游戏的志向坚定向前,以需求为目标,遇山移山、遇河搭桥,做出优质画面、剧情丰富、内涵深远的作品,这是你成为一个优秀游戏开发者唯一的也是最好的证明。
  • 附上今天学习的代码,创建一个Windows 窗口:
#include

#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
#define WINDOW_TITLE L"GameEngine"

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

int WINAPI WinMain(
    _In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPSTR lpCmdLine,
    _In_ int nShowCmd
)
{
    SetProcessDPIAware();
    int cx = GetSystemMetrics(SM_CXSCREEN);
    int cy = GetSystemMetrics(SM_CYMAXTRACK);

    WNDCLASSEX wndClass = { 0 };
    wndClass.cbSize = sizeof(WNDCLASSEX);
    wndClass.style = CS_DBLCLKS | CS_NOCLOSE | CS_VREDRAW | CS_HREDRAW;
    wndClass.lpfnWndProc = WndProc;
    wndClass.cbClsExtra = 0;
    wndClass.cbWndExtra = 0;
    wndClass.hInstance = hInstance;
    wndClass.hIcon = (HICON)::LoadImage(NULL, L"Image.ico", IMAGE_ICON, 0, 0,
        LR_DEFAULTSIZE | LR_LOADFROMFILE);
    wndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
    wndClass.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
    wndClass.lpszMenuName = NULL;
    wndClass.lpszClassName = L"ForTheDreamOfGameDevelop";

    if (!RegisterClassEx(&wndClass))
        return -1;

    HWND hWnd = CreateWindow(L"ForTheDreamOfGameDevelop",
        WINDOW_TITLE,
        WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH,
        WINDOW_HEIGHT, NULL, NULL, hInstance, NULL);

    MoveWindow(hWnd, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, true);

    ShowWindow(hWnd, nShowCmd);
    UpdateWindow(hWnd);

    MSG msg = { 0 };
    while (msg.message != WM_QUIT)
    {
        if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

    UnregisterClass(L"ForTheDreamOfGameDevelop", wndClass.hInstance);
    return 0;
}

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_PAINT:
        ValidateRect(hwnd, NULL);
        break;
    case WM_KEYDOWN:
        if (wParam == VK_ESCAPE)
            DestroyWindow(hwnd);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hwnd, message, wParam, lParam);
    }

    return 0;
}

你可能感兴趣的:(程序人生,GameEngine,独立游戏,3A游戏)