文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>屏幕双缓冲函数---手机开发 (典)

屏幕双缓冲函数---手机开发 (典)

时间:2010-03-11  来源:linux_wuliqiang

在游戏开发中,有时候为了加快屏幕绘制速度,需要用到屏幕缓冲区,即双缓冲。

这里说的屏幕缓冲区其实本质是一块与屏幕大小相对应的内存空间,

240X320的手机屏幕,它的缓冲区大小是240x320x2(16位的 bmp图片显示)字节,就是150KB左右。

  我们在绘制文字和图片时,其实就是往该内存里面写数据,也就是向内存里面绘制。最终,将内存中的数据一次性刷新到屏幕显示上。   下面,举例说明屏幕缓冲区的具体使用方法:

// 成功返回0, 失败返回 -1

int ScreenDoubleBuffer(void)
{
    // screen buffer point

    int* p_old_buf = NULL;
    int* p_new_buf = NULL;
    
    // screen width and height

    int scr_w = 240;
    int scr_h = 320;
    
    // screen buffer size

    int size = scr_w*scr_h*2;
    
     // 要显示字符串的宽高

    int text_w = 0
    int text_h = 0;

    char* pcText = "Test Screen buffer!";
    int ret = -1;
    int x,y;
    
    //--<1> get current screen buffer point

    p_old_buf = getScreenBuffer();
    if( NULL == p_old_buf ){
        return ret;
    }
    
    //<2>create new screen buffer

    p_new_buf = malloc(size);
    if( NULL == p_new_buf ){
        return MR_FAILED;
    }
    
    //<3>set new screen buffer

    setScreenBuffer( p_new_buf );
    
    //<4>draw text to new screen buffer

    clearScreen( 100, 100,100);
    
    // 得到要显示字符穿的宽高信息

    textWidthHeight( pcText, FALSE, MR_FONT_MEDIUM, &text_w,&text_h);
    
    // 居中显示

    x = ( scr_w - text_w )/2;
    y = ( scr_h - text_h )/2;
    
    // 是指将数据画到 new_buf 中了,并没有刷新界面显示

    drawText( pcText, x, y, 255, 255, 255, FALSE, MR_FONT_MEDIUM);
    
    //<5> recover screen buffer

    setScreenBuffer(p_old_buf);
    memcpy(p_old_buf,p_new_buf,size);
    
    refreshScreen(0,0,240,320); // 刷新屏幕显示

    
    return 0;
}

总结:

P_old_buf, 专门负责刷新屏幕显示
p_new_buf, 专门负责处理图片,文字的各种绘制操作, 然后将绘制的结果交给 p_old_buf 进行显示。。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载