我正在研究简单的2D游戏(像pacman一样)
游戏地图由瓷砖(2D阵列30x40)组成,每个瓷砖由16px x 16px图形表示。
我的问题是我每帧重绘所有的瓷砖(30x40 = 1200个瓷砖),这使得FPS非常低。
我解决这个问题的想法是将map(1200个tile)绘制到一个大缓冲区,然后每个帧只绘制这个缓冲区,但我不知道如何实现它,这是我第一个使用DirectX的项目。
如何实现,或者你有更好的想法。
代码(简化):
ID3D11Device* pDevice;
ID3D11DeviceContext* pImmediateContext;
ID3D11RenderTargetView* pRenderTargetView;
IDXGISwapChain* pSwapChain;
ID3D11Resource* pResource;
ID3D11ShaderResourceView* pTexture;
std::unique_ptr<DirectX::SpriteBatch> spriteBatch;
Game* pGame;
用于渲染帧的函数
void GameApp::renderGame(float dt) {
pImmediateContext->ClearRenderTargetView(pRenderTargetView, DirectX::Colors::Black);
spriteBatch->Begin();
pGame->draw();
spriteBatch->End();
pSwapChain->Present(0, 0);
}
pGame-&GT;绘制();
void Game::draw() {
for (int i = 0; i < sizeY; ++i) {
for (int j = 0; j < sizeX; ++j) {
// Draw tile
spriteBatch->Draw(pTexture, vPosition, &sourceRect, tint, rotation, vOrigin, vScale,
DirectX::SpriteEffects::SpriteEffects_None, 0.0f);
tile->Draw(spriteBatch);
}
}
}
我用来加载精灵的函数(我称之为一次,而不是循环)
DirectX::CreateDDSTextureFromFile(device, file, &pResource, &pTexture)
告诉我你是否需要更多细节。