游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1709|回复: 2

求助

[复制链接]

9

主题

37

帖子

59

积分

注册会员

Rank: 2

积分
59
发表于 2004-5-22 04:09:00 | 显示全部楼层 |阅读模式
下面是小弟自己写的一个当前主界面淡出效果的函数,可不知道为什么一执行就自己退出,各位大侠帮忙看看哪出错了,谢谢了。
DDSURFACEDESC Desc;
int dleft,dhigh,colorouttime;   
WORD *pDesc,R,G,B;
for(colorouttime=0;colorouttime<64;colorouttime++)
{
  lpDDSBack->Lock(0,&Desc,0,0);
  pDesc=(WORD*)Desc.lpSurface;
    for(dhigh=0;dhigh<480;dhigh++)
      {
        for(dleft=0;dleft<640;dleft++)
          {
            R=*pDesc&0xf800;
            G=*pDesc&0x0fe0;
            B=*pDesc&0x001f;
            if(R>0)                                                 R=R-0x0800;
            if(G>0)
        G=G-0x0020;
            if(B>0)
        B=B-0x0001;
            *pDesc=R|G;
            *pDesc=*pDesc|B;
            pDesc++;
          }
        pDesc-=Desc.lPitch/2;
      }
     lpDDSBack->Unlock(0);
     lpDDSPrimary->Flip(NULL,NULL);
   }       

9

主题

37

帖子

59

积分

注册会员

Rank: 2

积分
59
 楼主| 发表于 2004-5-22 04:17:00 | 显示全部楼层

求助

刚刚发的不全
void Primarycolorout( void )
{
        DDSURFACEDESC Desc;
        int dleft,dhigh,colorouttime;   
        WORD *pDesc,R,G,B;
    for(colorouttime=0;colorouttime<64;colorouttime++)//因为是使用的16位色,565模式,颜色最深也不过2的6次方,所以只扫行64次颜色递减
        {
                rect.top=0;
            rect.left=0;
            rect.bottom=480;
            rect.right=640;
            lpDDSBack->Blt(&rect,lpDDSPrimary,NULL,DDBLT_WAIT,NULL);  //这段用来保存当然主界面到背景缓冲区
                lpDDSBack->Lock(0,&Desc,0,0);
            pDesc=(WORD*)Desc.lpSurface;
                for(dhigh=0;dhigh<480;dhigh++)//使用的是640,480模式
                        {
                                for(dleft=0;dleft<640;dleft++)
                                {
                                        R=*pDesc&0xf800;
                                        G=*pDesc&0x0fe0;
                                        B=*pDesc&0x001f;
                                        if(R>0)
                                                R=R-0x0800;
                                        if(G>0)
                                                G=G-0x0020;
                                        if(B>0)
                                                B=B-0x0001;
                    *pDesc=R|G;
                                        *pDesc=*pDesc|B;
                                        pDesc++;
                                }
                                pDesc-=Desc.lPitch/2;
                        }
                lpDDSBack->Unlock(0);
                lpDDSPrimary->Flip(NULL,NULL);
        }       
}

201

主题

1437

帖子

1963

积分

金牌会员

Rank: 6Rank: 6

积分
1963
QQ
发表于 2004-5-22 10:25:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-1 03:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表