//帧率 const int FRAMES_PER_SECOND = 20;
SDL的alpha透明度是众所周知的慢。因为这是没有硬件加速的。无论你的系统插入了什么显卡,这都不会有太大区别。
我只是想指出,如果你发现SDL在这个演示程序中真的很慢,有可能是因为帧率被限制在20fps。
如果你想要硬件加速的图像,可以考虑OpenGL。它可以和SDL一起很好地工作。
我只是想指出,如果你发现SDL在这个演示程序中真的很慢,有可能是因为帧率被限制在20fps。
如果你想要硬件加速的图像,可以考虑OpenGL。它可以和SDL一起很好地工作。
//退出标识
bool quit = false;
//前表面的alpha值
int alpha = SDL_ALPHA_OPAQUE;
//帧率校准器
Timer fps;
//初始化
if( init() == false )
{
return 1;
}
//加载文件
if( load_files() == false )
{
return 1;
}
在main函数的顶部附近我们声明"alpha"来保存我们的前表面的alpha值。
//获取按键状态
Uint8 *keystates = SDL_GetKeyState( NULL );
//如果向上方向键被按下
if( keystates[ SDLK_UP ] )
{
//如果alpha没有达到最大值
if( alpha < SDL_ALPHA_OPAQUE )
{
//增大alpha
alpha += 5;
}
}
//如果向下方向键被按下
if( keystates[ SDLK_DOWN ] )
{
//如果alpha没有达到最小值
if( alpha > SDL_ALPHA_TRANSPARENT )
{
//减小alpha
alpha -= 5;
}
}
这里是我们调节alpha的地方。
Alpha的值和红、绿、蓝一样从0到255。Alpha为0意味着完全透明,并且等于SDL_ALPHA_TRANSPARENT。Alpha为255意味着完全不透明,并且等于SDL_ALPHA_OPAQUE。
在这段代码里,我们获取了按键状态,然后在↑按下时增加alpha,在↓按下时减小alpha。
Alpha的值和红、绿、蓝一样从0到255。Alpha为0意味着完全透明,并且等于SDL_ALPHA_TRANSPARENT。Alpha为255意味着完全不透明,并且等于SDL_ALPHA_OPAQUE。
在这段代码里,我们获取了按键状态,然后在↑按下时增加alpha,在↓按下时减小alpha。
//设置表面的alpha
SDL_SetAlpha( front, SDL_SRCALPHA, alpha );
//应用后表面
apply_surface( 0, 0, back, screen );
//应用前表面
apply_surface( 0, 0, front, screen );
//更新屏幕
if( SDL_Flip( screen ) == -1 )
{
return 1;
}
这里我们使用
然后我们blit后表面,接着blit带有我们设定的alpha值的前表面,最后我们更新屏幕。
SDL_SetAlpha()函数来设置前表面的alpha值。现在当前表面被blit时,它将会有我们设置的透明度。
然后我们blit后表面,接着blit带有我们设定的alpha值的前表面,最后我们更新屏幕。