簡體   English   中英

每個精靈都有一個 SDL_Surface 和 SDL_Texture 可以嗎?

[英]Is it okay to have a SDL_Surface and SDL_Texture for each sprite?

我正在嘗試使用 cpp 在 SDL2 中構建游戲引擎。 我有一個名為“實體”的 class,它有一些移動數據以及一些指向表面和紋理的指針。 function “render”被稱為 inmass 以基於 g_entities 向量渲染每個精靈。

class entity {
    ...
    SDL_Surface* image;
    SDL_Texture* texture;

    entity(const char* filename, SDL_Renderer * renderer, float size) {
        image = IMG_Load(filename);
        width = image->w * size;
        height = image->h * size;
        texture = SDL_CreateTextureFromSurface(renderer, image);
        g_entities.push_back(this);
        
    }

    ~entity() {
        SDL_DestroyTexture(texture);
        SDL_FreeSurface(image);
        //TODO remove from g_entities
    }

    void render(SDL_Renderer * renderer) {
        SDL_Rect dstrect = { x, y, width, height };
        SDL_RenderCopy(renderer, texture, NULL, &dstrect);
    }
    ...
}

所以程序為每個精靈創建一個新的紋理和表面。 這個可以嗎? 有更快的方法嗎?

如果是這樣,我想在它變得更大的混亂之前把它清理干凈。

我用 96 個精靈制作了一個測試關卡,每個精靈占屏幕的 2%,有大量的過度繪制,ft 是 15ms (~65fps),分辨率為 1600x900

是的,但實際上,沒有。 如果相同的精靈將被多次使用而無需修改,那么這些對象具有指向相同 SDL_Texture 的指針是最有效的。 此外,可以在生成紋理后釋放圖像。 此外,在構造函數中加載這些可能不是一個好主意,因為動態生成的對象需要讀取磁盤。

我建立了一個系統,其中實體在構造時被賦予另一個變量,如果是肯定的,實體將檢查並查看是否有任何其他實體使用相同的文件作為它的精靈,如果是,則使用相同的引用。

這意味着可以通過在關卡中生成單個子彈來有效地處理生成和銷毀的子彈等對象。

https://www.reddit.com/r/sdl/comments/lo24vt/is_it_okay_to_have_a_sdl_surface_and_sdl_texture/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM