Я пишу игру, которая имеет простую 2D-карту и должна определить, в каком «регионе» на карте щелкнул пользователь. С каждым регионом связан уникальный цвет RGB. Итак, учитывая (x,y)
координаты клика, я делаю это:
Uint32 *pixels = (Uint32 *) image_surface_->pixels;
Uint32 pixel = pixels[(y * image_surface_->w) + x];
Uint8 r, g, b;
SDL_GetRGB(pixel, image_surface_->format, &r, &g, &b);
SDL_Color rgb = {r, g, b, 255};
, где image_surface_
- это SDL_Surface
, который содержит карту, которая была загружена в игру SDL_Window
.
После приведенного выше кода я бегу по списку регионов и проверяю, какая из них имеет соответствующее значение цвета.
Мой вопрос: какова эффективность запроса пикселей SDL_Surface
? Это просто O(1)
, как кажется, потому что все, что вы делаете, это индексируете указатель? Или что-то еще происходит?
(Для реальной игры, которую я пишу, низкая эффективность не имеет большого значения, но я планирую разработать мини-движок для написания 2D (и, возможно, 3D-игр), который использует карту, которая теоретически могла бы быть очень большим со многими регионами)