我想在我的Texture類中實現alpha混合。它幾乎完全可以工作。我使用以下功能,用於操縱α值:在調整窗口大小後重設SDL中的Alpha混合
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
SDL_SetTextureAlphaMod(texture, alpha);
我唯一的問題是,已經操縱的紋理似乎重置爲255時我調整或最大化窗口的正常α值。我檢查了alpha值並認識到它仍然是我操縱它之前的值。所以這個值不是255.爲什麼渲染器像alpha值是255那樣渲染它呢?
關於信息如何,當我使用這些功能:
在遊戲主循環我改變紋理的Alpha值與我的紋理類的公共方法:
Texture::setAlphaValue(int alpha)
有Texture類的私有alpha變量被改變。
在我的紋理類的Draw方法紋理繪製和我打電話
SDL_SetTextureBlendMode(texture, SDL_BLENDMODE_BLEND);
SDL_SetTextureAlphaMod(texture, alpha);
前
SDL_RenderCopyEx(renderer, texture, &sourceRectangle, &destinationRectangle, 0, 0, SDL_Flip);
有關的信息我如何調整窗口大小:
我基本上只需在我的SDL初始化中將窗口模式設置爲可調整大小的窗口即可。然後處理它像任何普通窗口是可能的:
SDL_CreateWindow(window_Title, x_Position, y_Position, window_Width, window_Height, SDL_WINDOW_RESIZABLE);
我的主迴路面積:
這是主要的遊戲循環:
void Game::Render()
{
// set color and draw window
SDL_SetRenderDrawColor(renderer, windowColor.R(), windowColor.G(), windowColor.B(), 0);
SDL_RenderClear(renderer);
texture.setAlphaValue(100);
texture.Draw(SDL_FLIP_NONE);
// present/draw renderer
SDL_RenderPresent(renderer);
}
測試我的項目:
我還將我的alpha混合測試項目上傳到了Dropbox。在這個項目中,我簡化了一切,甚至沒有一個紋理類。所以代碼非常簡單,但是bug仍然存在。這裏是Visual Studio項目的鏈接:http://www.dropbox.com/s/zaipm8751n71cq7/Alpha.rar
您如何調整窗口大小? – Zammalad 2015-04-07 08:03:09
@Zammalad我將窗口模式設置爲SDL_WINDOW_RESIZABLE,然後它就像任何程序一樣是一個普通窗口,可以通過將鼠標移動到其邊框來調整窗口大小。 – huzzm 2015-04-08 13:44:13
,所以你可以在每一幀調用'SDL_SetTextureBlendMode'和'SDL_SetTextureAlphaMod',即在繪製紋理的調用中。您的紋理類是否存儲了值'alpha'或者是您傳遞給'Draw'函數的參數。 – Zammalad 2015-04-08 17:29:17