游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3209|回复: 5

求助:唐老师,关于<学vc,编游戏>的问题

[复制链接]

23

主题

67

帖子

67

积分

注册会员

Rank: 2

积分
67
发表于 2004-10-27 15:36:00 | 显示全部楼层 |阅读模式
void TransparentBlt2( HDC hdc0,        int nX0,int nY0,int nW0,int nH0,HDC hdc1,int nX1,int nY1,int nW1,int nH1,        UINT Tcol)        {       
                HBITMAP hBMP   =CreateCompatibleBitmap(hdc0,nW0, nH0);
        HBITMAP mBMP   =CreateBitmap(nW0,nH0,1,1,NULL);       
        HDC                hDC    =CreateCompatibleDC(hdc0);
        HDC                mDC    =CreateCompatibleDC(hdc0);
        HBITMAP oldBMP =(HBITMAP)SelectObject(hDC, hBMP);
        HBITMAP oldmBMP=(HBITMAP)SelectObject(mDC, mBMP);
        if (nW0==nW1&&nH0==nH1)
                BitBlt(hDC,0,0,nW0,nH0,hdc1,nX1,nY1,SRCCOPY);
        else
                StretchBlt(hDC,0,0,nW0,nH0,hdc1,nX1,nY1,nW1,nH1,SRCCOPY);

        SetBkColor(hDC, Tcol);
        BitBlt(mDC,0,0,nW0,nH0,hDC,0,0,SRCCOPY);
        SetBkColor(hDC, RGB(0,0,0));
        SetTextColor(hDC, RGB(255,255,255));
        BitBlt(hDC,0,0,nW0,nH0,mDC,0,0,SRCAND);
        SetBkColor(hdc0,RGB(255,255,255));
        SetTextColor(hdc0,RGB(0,0,0));

        BitBlt(hdc0,nX0,nY0,nW0,nH0,mDC,0,0,SRCAND);
        BitBlt(hdc0,nX0,nY0,nW0,nH0,hDC,0,0,SRCPAINT);

        SelectObject(hDC, oldBMP);                               
        DeleteDC(hDC);
        SelectObject(mDC, oldmBMP);
        DeleteDC(mDC);
        DeleteObject(hBMP);
        DeleteObject(mBMP);
}
本人学习了唐老师您的<学vc,编游戏>的前几章节后,收益非浅,但在读下去就有碰到了问题,希望唐老师能再帮帮我这个菜鸟.
请问你所定义的TransparentBlt2函数是怎么把图片框框去掉的?最好具体注释一下这一段程序,谢谢

42

主题

334

帖子

344

积分

中级会员

Rank: 3Rank: 3

积分
344
发表于 2004-10-27 16:01:00 | 显示全部楼层

Re:求助:唐老师,关于<学vc,编游戏>的问题

看书的4-2-1 透明显示位图的原理。
在这段程序中分别把几个BitBlt(...)注释掉你就可以看到程序的作用了。

10

主题

314

帖子

314

积分

中级会员

Rank: 3Rank: 3

积分
314
QQ
发表于 2004-11-2 16:54:00 | 显示全部楼层

Re:求助:唐老师,关于<学vc,编游戏>的问题

昏。唐老师啊。什么叫“把Bitblt()函数后的注释掉就可以看到程序的作用了”。
什么意思啊。

谢谢

10

主题

314

帖子

314

积分

中级会员

Rank: 3Rank: 3

积分
314
QQ
发表于 2004-11-2 16:55:00 | 显示全部楼层

Re:求助:唐老师,关于<学vc,编游戏>的问题

SetBkColor(hDC, Tcol);
BitBlt(mDC,0,0,nW0,nH0,hDC,0,0,SRCCOPY);
SetBkColor(hDC, RGB(0,0,0));
SetTextColor(hDC, RGB(255,255,255));
BitBlt(hDC,0,0,nW0,nH0,mDC,0,0,SRCAND);
SetBkColor(hdc0,RGB(255,255,255));
SetTextColor(hdc0,RGB(0,0,0));

这几句是最关键的。可我就是看不懂他的前俩句啊。

唐老师给指点一下啊。谢谢了

42

主题

334

帖子

344

积分

中级会员

Rank: 3Rank: 3

积分
344
发表于 2004-11-3 08:39:00 | 显示全部楼层

Re:求助:唐老师,关于<学vc,编游戏>的问题

我要讲清可能要几百上千字,你也要花十几、二十分钟时间。
你若将程序调入VC。分别在两个BitBlt()前加"//"后运行,一切都清楚了。

10

主题

314

帖子

314

积分

中级会员

Rank: 3Rank: 3

积分
314
QQ
发表于 2004-11-3 18:12:00 | 显示全部楼层

Re:求助:唐老师,关于<学vc,编游戏>的问题

谢谢唐老师啊。

我还想说的是你的书第58和59页好象有一点问题啊。

59页定义那个角色移动函数时,里的switch语句里有一句是 case 2:{stx=9;sty=6;break};
您写的注释是“跑的步长”,但根据58页定义的那个结构体类型来说,当ZS为2时,动作 应该是“刺”啊。。

还有59页“图5-2”上面的文字里有与句是“根据角色的当前位置(X0,Y0)与目标位置(XIX,XIY)计算的位置差(X,Y),来判断角色的移动方向”。但根据你58也下面的按键消息里的程序和59页下面的角色移动函数里定义的坐标变量来看。(X0,Y0)应该是目标位置。而(XIX,XIY)则是当前位置,位置差应该是(qx,qy)。不知道我说的对不对啊。

谢谢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-23 02:11

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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