Изменение текстуры в реальном времени SDL

Извините, я немного новичок в разработке на SDL и C ++. Прямо сейчас я создал карту листов, которая читает из моего файла map.txt. Пока это работает, но я хочу добавить редактирование карты сейчас.

SDL_Texture *texture;
texture= IMG_LoadTexture(G_Renderer,"assets/tile_1.png");
SDL_RenderCopy(G_Renderer, texture, NULL, &destination);
SDL_RenderPresent(G_Renderer);

Выше приведен основной способ, которым я показываю свои плитки, но если я хочу войти и изменить текстуру в режиме реального времени, это немного глючит и работает не очень хорошо. Есть ли метод, который лучше всего подходит для редактирования текстуры? Спасибо за помощь, я ценю все.

1

Решение

Самый простой способ — создать контейнер для хранения с некоторыми текстурами, которые вы будете использовать повторно; например, вектор или словарь / карта. Используя картографический подход, например, вы можете сделать что-то вроде:

// remember to #include <map>
map<string, SDL_Texture> myTextures;
// assign using array-like notation:
myTextures["texture1"] = IMG_LoadTexture(G_Renderer,"assets/tile_1.png");
myTextures["texture2"] = IMG_LoadTexture(G_Renderer,"assets/tile_2.png");
myTextures["texture3"] = IMG_LoadTexture(G_Renderer,"assets/tile_3.png");
myTextures["texture4"] = IMG_LoadTexture(G_Renderer,"assets/tile_4.png");

затем, чтобы использовать другую текстуру, все, что вам нужно сделать, это использовать что-то вроде:

SDL_RenderCopy(G_Renderer, myTextures["texture1"], NULL, &destination);
SDL_RenderPresent(G_Renderer);

который можно дополнительно контролировать, изменив первую строку на

SDL_RenderCopy(G_Renderer, myTextures[textureName], NULL, &destination);

где textureName строковая переменная, которую вы можете изменить в коде в реальном времени.

Этот подход означает, что вы можете загрузить все текстуры, которые вам понадобятся, заранее и просто использовать их по мере необходимости позже, то есть во время рендеринга нет загрузки из файловой системы 🙂

Есть хорошее объяснение карты Вот.

Надеюсь, это даст вам толчок в правильном направлении. Дайте мне знать, если вам нужно больше информации 🙂

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]