Thắc mắc về SDL2.0

chào mọi người ạ. em là newbie 2k3 có một chút thắc mắc về sdl2 như sau ạ:
khi em học trên lazyfoo về sdl thì nó có như sau:

//Key press surfaces constants
enum KeyPressSurfaces
{
    KEY_PRESS_SURFACE_DEFAULT,
    KEY_PRESS_SURFACE_UP,
    KEY_PRESS_SURFACE_DOWN,
    KEY_PRESS_SURFACE_LEFT,
    KEY_PRESS_SURFACE_RIGHT,
    KEY_PRESS_SURFACE_TOTAL
};

//The images that correspond to a keypress
SDL_Surface* gKeyPressSurfaces[ KEY_PRESS_SURFACE_TOTAL ];

bool loadMedia()
{
    //Loading success flag
    bool success = true;

    //Load default surface
    gKeyPressSurfaces[ KEY_PRESS_SURFACE_DEFAULT ] = loadSurface( "04_key_presses/press.bmp" );
    if( gKeyPressSurfaces[ KEY_PRESS_SURFACE_DEFAULT ] == NULL )
    {
        printf( "Failed to load default image!\n" );
        success = false;
    }

    //Load up surface
    gKeyPressSurfaces[ KEY_PRESS_SURFACE_UP ] = loadSurface( "04_key_presses/up.bmp" );
    if( gKeyPressSurfaces[ KEY_PRESS_SURFACE_UP ] == NULL )
    {
        printf( "Failed to load up image!\n" );
        success = false;
    }

    //Load down surface
    gKeyPressSurfaces[ KEY_PRESS_SURFACE_DOWN ] = loadSurface( "04_key_presses/down.bmp" );
    if( gKeyPressSurfaces[ KEY_PRESS_SURFACE_DOWN ] == NULL )
    {
        printf( "Failed to load down image!\n" );
        success = false;
    }

    //Load left surface
    gKeyPressSurfaces[ KEY_PRESS_SURFACE_LEFT ] = loadSurface( "04_key_presses/left.bmp" );
    if( gKeyPressSurfaces[ KEY_PRESS_SURFACE_LEFT ] == NULL )
    {
        printf( "Failed to load left image!\n" );
        success = false;
    }

    //Load right surface
    gKeyPressSurfaces[ KEY_PRESS_SURFACE_RIGHT ] = loadSurface( "04_key_presses/right.bmp" );
    if( gKeyPressSurfaces[ KEY_PRESS_SURFACE_RIGHT ] == NULL )
    {
        printf( "Failed to load right image!\n" );
        success = false;
    }

    return success;
}

và hàm int main(){}

em muốn hỏi là nếu như mình muốn đưa cái SDL_Surface* gKeyPressSurfaces[ KEY_PRESS_SURFACE_TOTAL ]; vào hàm main() thì trong hàm bool LoadMedia() mình phải đặt trong dấu ngoặc là gì ạ và tại sao ạ?
Theo em mò thì em đặt nguyên cái SDL_Surface* gKeyPressSurfaces[ KEY_PRESS_SURFACE_TOTAL ] vào thì nó sẽ chạy đúng nhưng em không biết tại sao lại vậy ạ.

Mong mọi người chỉ cho em và nếu có gì không đúng mong mọi người bỏ qua ạ. em cảm ơn

Cho mình hỏi tí nhé, mình thắc mắc cái SDL này có phải là 1 môn học (tại trường) hay không? Hoặc cho mình hỏi lí do bạn tìm hiểu SDL cũng được (do thích, tự học hay sao)?
Vì mình thấy khá nhiều topic hỏi về SDL này. Thanks.

2 Likes

chắc là tìm hiểu thêm để code có hình tí chứ code console xấu òm sao khoe được :joy:

đặt bool loadMedia(SDL_Surface** gKeyPressSurfaces) cũng được nha. Trong C/C++ mảng khai báo theo kiểu T a[...]; khi truyền vào hàm nó sẽ bị “decay” thành con trỏ :V Nên viết bool loadMedia(SDL_Surface* gKeyPressSurfaces[ KEY_PRESS_SURFACE_TOTAL ]) thì nó cũng hiểu là bool loadMedia(SDL_Surface** gKeyPressSurfaces) thôi à :V gKeyPressSurfaces là mảng chứa con trỏ tới SDL_Surface, thì khi truyền vào hàm loadMedia sẽ bị decay thành con trỏ trỏ tới vùng nhớ có kiểu là con trỏ tới SDL_Surface hay SDL_Surface** :V

còn tại sao mảng truyền vào hàm lại bị decay thành con trỏ (tới phần tử đầu tiên) thì là do C đi từ B/BCPL gì đó lên, mà BCPL thì ko có kiểu gì hết :V :V :V nên lúc thiết kế ngôn ngữ C muốn code B vẫn chạy được thì phải cho mảng “decay” thành con trỏ: https://www.bell-labs.com/usr/dmr/www/chist.html

The solution constituted the crucial jump in the evolutionary chain between typeless BCPL and typed C. It eliminated the materialization of the pointer in storage, and instead caused the creation of the pointer when the array name is mentioned in an expression. The rule, which survives in today’s C, is that values of array type are converted, when they appear in expressions, into pointers to the first of the objects making up the array.

This invention enabled most existing B code to continue to work, despite the underlying shift in the language’s semantics.

5 Likes

tại mình thích và muốn thử làm gêm thoi nhé b chứ đã học đh đâu mà là môn học :rofl:

1 Like

tại em thấy người ta bảo dùng biến toàn cục là không nên nên em muốn chuyển nó vào thành biến cục bộ th ạ :yum:

1 Like

em cứ tưởng đây là copy vào hàm như biến bình thường mà lại không phải :no_mouth:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?