2013年4月26日(7-7,从一个表面向另一个表面复制位图)

从书上看,这个DEMO不复杂,就是把源矩形复制到目标矩形,我得每天首先封装引擎一个,

核心代码应该是

int x1                           = rand() % SCREEN_WIDTH;

     int  y1                          = rand() % SCREEN_HEIGHT;

     int  x2                          = rand() % SCREEN_WIDTH;

     int  y2                          = rand() % SCREEN_HEIGHT;

 

     int x3                           = rand() % SCREEN_WIDTH;

     int  y3                          = rand() % SCREEN_HEIGHT;

     int  x4                          = rand() % SCREEN_WIDTH;

     int  y4                          = rand() % SCREEN_HEIGHT;

 

     source_rect.left            = x1;

     source_rect.top                  = y1;

     source_rect.right           = x2;

     source_rect.bottom          = y2;

 

     dest_rect.left                   = x3;

     dest_rect.top               = y3;

     dest_rect.right                  = x4;

     dest_rect.bottom            = y4;

 

     lpddsprimary->Blt( & dest_rect, lpddsback, & source_rect, DDBLT_WAIT,  NULL );

 

截图如下图所示。

 

 

在引擎中,直接看看t3dlib吧,

先看ddraw_init()

将DDSCL_MULTITHREADED加到m_dwCooprativeFlags;

m_lpdd->SetDisplayMode( m_dwWidth, m_dwHeight, m_dwBPP, 0, 0 );明确表示

在窗口模式中

              ddsd.dwBackBufferCount      = 0;

然后,在清除颜色时,窗口只清除后备缓冲,全屏需要都清除。

DDraw_Fill_Surface( m_lpddsback, 0 );

DDraw_Fill_Surface( m_lpddsprimary, 0 );

在窗口上,要创建一个lpddsback离屏表面,是后面的内容了,所以先不要。

由于这个DEMO,并非很标准,用到了汇编,所以也先不用在GAME_MAIN()里面了。

再看下函数DDraw_Flip()

加上了窗口模式,

     RECT     dest_rect;

         GetWindowRect( m_hWnd, & dest_rect );

        

         dest_rect.left                       += window_client_x0;

         dest_rect.top                    += window_client_y0;

 

         dest_rect.right                      += dest_rect.left + SCREEN_WIDTH;

         dest_rect.bottom                 += dest_rect.top + SCREEN_HEIGHT;

 

         m_lpddsprimary->Blt( & dest_rect, m_lpddsback, NULL, DDBLT_WAIT, NULL );

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值