跳转到内容

mermaid Diagram
mermaid Diagram
mermaid Diagram
mermaid Diagram
c++
std::vector<std::unique_ptr<Texture>> textures;
std::vector<std::unique_ptr<MapLayer>> renderLayers;

//load the tile map
tmx::Map map;
if (map.load("assets/demo.tmx"))
{
    //load the textures as they're shared between layers
    const auto& tileSets = map.getTilesets();
    assert(!tileSets.empty());
    for (const auto& ts : tileSets)
    {
        textures.emplace_back(std::make_unique<Texture>());
        if (!textures.back()->loadFromFile(ts.getImagePath(), renderer))
        {
            std::cerr << "Failed opening " << ts.getImagePath() << "\n";
        }
    }

    //load the layers
    const auto& mapLayers = map.getLayers();
    for (auto i = 0u; i < mapLayers.size(); ++i)
    {
        if (mapLayers[i]->getType() == tmx::Layer::Type::Tile)
        {
            renderLayers.emplace_back(std::make_unique<MapLayer>());
            renderLayers.back()->create(map, i, textures); //just cos we're using C++14
        }
    }
}


//enter loop...
SDL_SetRenderDrawColor(renderer, 100, 149, 237, 255);

bool running = true;
while (running)
{
    //pump events
    SDL_Event evt;
    while (SDL_PollEvent(&evt))
    {
        if (evt.type == SDL_QUIT)
        {
            running = false;
        }
        else if (evt.type == SDL_KEYDOWN)
        {
            switch (evt.key.keysym.sym)
            {
            default: break;
            case SDLK_ESCAPE:
                running = false;
                break;
            }
        }
    }

    //clear/draw/display
    SDL_RenderClear(renderer);
    for (const auto& l : renderLayers)
    {
        l->draw(renderer);
    }
    SDL_RenderPresent(renderer);
}

基于 MIT 许可发布