游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2393|回复: 8

窗口模式的苦恼.

[复制链接]

22

主题

30

帖子

32

积分

注册会员

Rank: 2

积分
32
发表于 2004-9-20 09:38:00 | 显示全部楼层 |阅读模式
用DirectDraw在全屏模式下如果画一个图,那么下一次再Flip后,原来的画的图就不会继续存在,必须再画一遍,我觉得这样很好,尤其是画一个走动的图
画时就很好.但在窗口模式下画一个图后,要是将这个图再移动到别的地方,就必须把以前的图象给擦掉.这真是太麻烦了. 大家有没有什么好的解决办法能做成象全屏下的那样呢? 多谢.
[em4]

22

主题

30

帖子

32

积分

注册会员

Rank: 2

积分
32
 楼主| 发表于 2004-9-20 15:58:00 | 显示全部楼层

Re:窗口模式的苦恼.

顶,怎么没人回答啊.

30

主题

398

帖子

403

积分

中级会员

Rank: 3Rank: 3

积分
403
QQ
发表于 2004-9-20 16:04:00 | 显示全部楼层

Re: 窗口模式的苦恼.

jimmymaster: 窗口模式的苦恼.

用DirectDraw在全屏模式下如果画一个图,那么下一次再Flip后,原来的画的图就不会继续存在,必须再画一遍,我觉...



如果你是GDI 编程的话.可不清屏继续画的.如果是DDraw的话....难道不同么?

1

主题

5

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2004-9-21 15:06:00 | 显示全部楼层

Re:窗口模式的苦恼.

当然要再画一遍
即使是GDI作图
他本质上当窗体移动时他也是再画一遍的
只不过这些系统都帮你做了

0

主题

21

帖子

21

积分

注册会员

Rank: 2

积分
21
发表于 2004-9-24 13:59:00 | 显示全部楼层

Re:窗口模式的苦恼.

建议先了解一下动画的基本理论吧

10

主题

30

帖子

191

积分

注册会员

Rank: 2

积分
191
发表于 2004-9-25 10:30:00 | 显示全部楼层

Re:窗口模式的苦恼.

你可以使用窗口背景把上一次的图覆盖

4

主题

16

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2004-9-28 13:50:00 | 显示全部楼层

Re:窗口模式的苦恼.

我在用dx做窗口模式时,也遇到了问题。按理说一个surface创建完成之后,他在内存或者显存中所占的空间就应该是一定的。但为什么我观察内存时却发现他是不断增加的。下面是我得程序:
// -----------------------------------------------------------------------
void RefreshWindow(IDirectDrawSurface7* pdd,IDirectDrawSurface7* pdds)
{
        RECT hRect;
        hRect.top = 105;
        hRect.left = 125;
        hRect.right = SCREEN_WIDTH+235;
        hRect.bottom = SCREEN_HEIGHT+195;
        hr = pdd->BltFast(125, 105,pdds,&hRect,DDBLTFAST_SRCCOLORKEY);
}
// -----------------------------------------------------------------------
int Put(LPCSTR szBitmap,IDirectDrawSurface7* pdd,int startX,int endY,int decX,int decY,int x,int y,int dx,int dy)
{
        HDC                     hdcImage;
        HDC                     hdc;
        BITMAP                  bm;

        hOurBitmap =  (HBITMAP)LoadImage(GetModuleHandle(NULL), szBitmap,IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);
        if (hOurBitmap == NULL)
                return 0;
        hdcImage = CreateCompatibleDC(NULL);
        if (!hdcImage) return 0;
        SelectObject(hdcImage, hOurBitmap);
       
        GetObject(hOurBitmap, sizeof(bm), &bm);
        dx = dx == 0 ? bm.bmWidth : dx;     // Use the passed size, unless zero
        dy = dy == 0 ? bm.bmHeight : dy;
        // -------------------------------------------------------------------
        memset(&ddsd,0,sizeof(ddsd));
        ddsd.dwSize = sizeof(ddsd);
        ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH;

        if ((hr = pdd->GetSurfaceDesc(&ddsd))!=DD_OK) return 0;
        if ((hr = pdd->GetDC(&hdc)) == DD_OK)
        {
                StretchBlt(hdc, 125+startX, 105+endY, decX+125, decY+105, hdcImage, x, y,        dx, dy, SRCCOPY);
                pdd->ReleaseDC(hdc);
        }
        DeleteDC(hdcImage);
        // -------------------------------------------------------------------
    return 1;
}
// -----------------------------------------------------------------------
// -----------------------------------------------------------------------
//主函数
int APIENTRY WinMain(HINSTANCE hInstance,
                                         HINSTANCE hPrevInstance,
                                         LPSTR     lpCmdLine,
                                         int       nCmdShow)
{   
        if(!InitWindow(hInstance))
                return 0;
        if(!CreateDirectDraw())
                return 0;
        int i = 0;
        if(Put("background",lpddOne,0,0,SCREEN_WIDTH,SCREEN_HEIGHT,0,0,SCREEN_WIDTH,SCREEN_HEIGHT)==0)
                return 0;
                 //lpddOne是离屏表面
        //放在while外面cpu使用很大
        while(WeAreAlive)
        {       
               
                //if(Put("two",lpddOne,100,100,10,10,0,0,100,100)==0)//放在while里面内存不断增加
                //        return 0;
                RefreshWindow(lpddSprimary,lpddOne);
                HandleEvents();
                i++;
        }
        DestroyDirectDraw();
        return 0;

}

33

主题

669

帖子

669

积分

高级会员

Rank: 4

积分
669
QQ
发表于 2004-10-1 19:25:00 | 显示全部楼层

Re:窗口模式的苦恼.

离屏页面加载一次就可以了,它不会自动释放的

60

主题

1319

帖子

1319

积分

金牌会员

Rank: 6Rank: 6

积分
1319
发表于 2004-10-2 12:11:00 | 显示全部楼层

Re:窗口模式的苦恼.

就算是全屏的也得清屏吧?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-18 20:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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