STDIO
Tìm kiếm gần đây
    • Nội dung
    • QR Code
    • 0
    • 0
    • Sao chép

    Khởi Tạo Môi Trường Lập Trình Game Sử Dụng Thư Viện SDL (Simple DirectMedia Layer)

    Giới thiệu về thư viện Simple DirectMedia Layers và làm quen 1 số thao tác cơ bản với thư viện này.
    08/10/2015
    27/09/2020
    5 phút đọc
    Khởi Tạo Môi Trường Lập Trình Game Sử Dụng Thư Viện SDL (Simple DirectMedia Layer)

    Quá trình xây dựng engine game cần một số thư viện cung cấp những hàm API để thao tác với hệ thống cấp thấp bên dưới như âm thanh, bàn phím, chuột và các hệ thống khác. Thư viện SDL (Simple DirectMedia Layer) cung cấp đầu đủ những hàm API để làm được những việc đó.

    Tổng quan về thư viện SDL

    • SDL (Simple DirectMedia Layer) là 1 thư viện đa phương tiện, đa nền tảng, bao gồm các API để thao tác với âm thanh, bàn phím, chuột, joystick, 3D hardware thông qua OpenGL, and 2D video.
    • SDL hỗ trợ các nền tảng như Linux, Windows, Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX.
    • SDL được viết bằng C nhưng hỗ trợ tốt với C++ và hiện tại cũng đã hỗ trợ các ngôn ngữ khác như Ada, C#, Lua, Ocaml, Pascal và Python.
    • Các game sử dụng thư viện SDL như Syberia II, 7 Grands Step, Secret Maryo Chronicles, ...

    Download và tích hợp SDL vào project

    Download thư viện

    Download thư viện SDL tại đây, ở mục Development Libraries có các thư viện hỗ trợ các nền tảng như Windows, Mac OS X, Linux, iOS và Android. Ví dụ trên nền tảng windows, chọn SDL2-devel-2.0.12-VC.zip (Visual C++ 32/64-bit) để download hoặc có thể download tại đây.

    Tích hợp thư viện vào Visual Studio

    Mở Visual Studio, tạo 1 Empty Project bằng cách vào File > New > Project, sau đó chọn Empty Project, đặt tên và nhấn OK để tạo Project.

    ss_1(1)

    Tiếp theo, tạo 2 thư mục LibOutput để chứa thư viện SDL và file thực thực thi *.exe cùng cấp với file .sln.

    Sau đó copy 2 thư mục là includelib được download ở trên để vào thư mục Lib vừa tạo và file SDL2.dll nằm trong thư mục lib/x86 vào thư mục Output chứa file thực thi.

    Nhấn chuột phải (Right click) vào Project để mở hộp thoại Properties. Chọn C/C++ > General  và mở hộp thoại Additional Include Directories để thêm đường dẫn tới thư mục header của SDL là thư mục include:

    ss_2

    Tương tự, chọn Linker/General mở hộp thoại Additional Library Directories để thêm đường dẫn tới các file thư viện của SDL nằm trong thư mục lib:

    ss_3

    Ở mục Linker chọn Input và mở hộp thoại Additional Dependencies thêm vào SDL2.libSDL2main.lib:

    ss_4

    Cuối cùng là cấu hình lại thư mục chứa file thực thi bằng cách chọn Configuration Properties/General và mở hộp thoại Output Directory thêm vào đường dẫn như sau:

    ss_5

    * Nên để đường dẫn tương đối bằng cách dùng $(SolutionDir) để lấy về đường dẫn tới Solution, nếu  để đường dẫn tuyệt đối thì khi project được copy sang máy khác có thể không chạy được do không tìm thấy thư viện.

    Khởi tạo cửa sổ

    Để sử dụng thư viện SDL đã thêm ở trên, include các file header như sau:

    #include <SDL.h>

    SDL cung cấp 1 hàm để khởi tạo thư viện có prototype như sau:

    int SDL_Init(Uint32 flags)

    Hàm trả về 0 nếu khởi tạo thành công và ngược lại trả về -1 nếu khởi tạo thất bại, có thể sử dụng hàm SDL_GetError() để lấy về thông báo lỗi nếu khởi tạo thất bại.

    Tham số của SDL_Init là 1 tham số flags kiểu int, nằm trong những giá trị sau đây hoặc có thể dùng toán tử | để kết hợp nhiều lựa chọn.

     SDL_INIT_TIMER  Timer subsystem
     SDL_INIT_AUDIO  Audio subsystem
     SDL_INIT_VIDEO  Video subsystem
     SDL_INIT_JOYSTICK  Joystick subsystem
     SDL_INIT_HAPTIC  Haptic (force feedback) subsystem
     SDL_INIT_GAMECONTROLLER  Controller subsystem
     SDL_INIT_EVENTS  Events subsystem
     SDL_INIT_EVERYTHING  All of the above subsystems
     SDL_INIT_NOPARACHUTE  Compatibility; this flag is ignored

    Mã nguồn khởi tạo thư viện SDL:

    //Initializes the subsystems
    if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
    {
    	printf("Unable to initialize SDL %s\n", SDL_GetError());
    	return -1;
    }

    Tiếp theo, khởi tạo 1 đối tượng quản lý cửa sổ là SDL_Window như sau: 

    SDL_Window* window = NULL;
    window = SDL_CreateWindow("Stdio.vn - SDL", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 640, SDL_WINDOW_SHOWN);
    if (window == NULL)
    {
    	printf("Could not create window %s\n", SDL_GetError());
    	return -1;
    }
    

    Hàm SDL_CreateWindow trả về NULL nếu thất bại, hàm có prototype như sau:

    SDL_Window* SDL_CreateWindow(const char* title, int x, int y, int w, int h, Uint32 flags)

    Với các tham số lần lượt là tiêu đề cửa cửa sổ, vị trí x, y, chiều rộng, chiều cao của cửa sổ. Tham số cuối cùng nằm trong những giá trị sau hoặc có thể dùng toán tử | để kết hợp nhiều lựa chọn. Bài viết sử dụng SDL_WINDOW_SHOWN để chắc chắn cửa sổ luôn luôn được hiểu thị.

     SDL_WINDOW_FULLSCREEN  Fullscreen window
     SDL_WINDOW_FULLSCREEN_DESKTOP  Fullscreen window at the current  desktop resolution
     SDL_WINDOW_OPENGL  Window usable with OpenGL context
     SDL_WINDOW_SHOWN  Window is visible
     SDL_WINDOW_HIDDEN  Window is not visible
     SDL_WINDOW_BORDERLESS  No window decoration
     SDL_WINDOW_RESIZABLE  Window can be resized
     SDL_WINDOW_MINIMIZED  Window is minimized
     SDL_WINDOW_MAXIMIZED  Window is maximized
     SDL_WINDOW_INPUT_GRABBED  Window has grabbed input focus
     SDL_WINDOW_INPUT_FOCUS  Window has input focus
     SDL_WINDOW_MOUSE_FOCUS  Window has mouse focus
     SDL_WINDOW_FOREIGN  Window not created by SDL
     SDL_WINDOW_ALLOW_HIGHDPI  Window should be created in high-DPI   mode if supported (>= SDL 2.0.1)
     SDL_WINDOW_MOUSE_CAPTURE  Window has mouse captured (unrelated   to INPUT_GRABBED, >= SDL 2.0.4)

    Đoạn mã sau để giữ cửa số hiển thị 5 giây, sau đó thu dọn tài nguyên đã cấp phát và đóng ứng dụng.

    SDL_Delay(5000);
    //Destroy a window
    SDL_DestroyWindow(window);
    //This function cleans up all initialized subsystems SDL_Quit();

    Kết quả sau khi biên dịch và chạy chương trình:

    ss_6

    Download source code

    Tham khảo

    0 Bình luận
    Lập Trình Game

    Lập Trình Game

    Kiến thức, kỹ thuật, kinh nghiệm lập trình game.

    Đề xuất

    Play Audio trong SDL
    Hướng dẫn cách play Sound Effects và Music sử dụng thư viện mở rộng của ...
    Xử Lý Sự Kiện Trong SDL
    Hướng dẫn xử lý sự kiện trong game bằng thư viện SDL.

    Khám phá

    Khởi Tạo Môi Trường Lập Trình Đồ Họa OpenGL Trên Windows với GLEW và GLFW3
    Hướng dẫn khởi tạo môi trường đồ họa với OpenGL, GLEW và GLFW3.
    28/09/2014
    Validate Form Bằng Thư Viện Knockout-Validation trong Dự Án Durandaljs
    Bài viết hướng dẫn sử dụng thư viện Knockout-Validation để kiểm tra dữ ...
    Lập Trình Win32 API - Phần 3: Tạo Và Sử Dụng Resource
    Resource - tài nguyên là một sức mạnh lớn trong việc lập trình bao gồm ...
    Áp Dụng Kỹ Thuật OOP Trong Quá Trình Xây Dựng Framework Dựa Trên Thư Viện SDL
    Áp dụng kỹ thuật lập trình - OOP trong quá trình xây dựng Engine Game ...
    Draw Text trong SDL
    Hướng dẫn cách vẽ những dòng text trong game bằng cách sử dụng một thư ...
    Cài Đặt Môi Trường Linux trên Windows 10
    Hướng dẫn cài đặt và thiết lập môi trường Linux trên Windows 10 ...
    Cài Đặt Môi Trường Lập Trình C++ Với Visual Studio 20xx Community
    Hướng dẫn cài đặt Visual Studio Community và môi trường lập trình C++ ...
    Tổng Quan về Ngôn Ngữ Lập Trình Java
    Java là 1 trong những ngôn ngữ lập trình mạnh mẽ, được sử dụng rộng rãi ...
    Khi bạn nhấn vào liên kết sản phẩm do STDIO đề xuất và mua hàng, STDIO có thể nhận được hoa hồng. Điều này hỗ trợ STDIO tạo thêm nhiều nội dung hữu ích. Tìm hiểu thêm.
    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020