游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2375|回复: 4

游戏中的问题

[复制链接]

6

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
QQ
发表于 2007-10-11 09:03:00 | 显示全部楼层 |阅读模式
本人想做一个RPG的小游戏,在此有一个问题想问大家:在游戏中怎么显示物体或人物的轮廓啊,我是用
windows API实现的,大家能不能给一个演示代码.在此谢谢大家!!

5

主题

755

帖子

757

积分

高级会员

Rank: 4

积分
757
发表于 2007-10-11 11:11:00 | 显示全部楼层

Re:游戏中的问题

2D还是3D??3D可以搜索以下描边算法。如果是2D做两张图。就是每一个人物在做一张有alpha的轮廓图。画的时候用if判断是否需要显示就好

6

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
QQ
 楼主| 发表于 2007-10-11 15:11:00 | 显示全部楼层

Re: 游戏中的问题

谢谢回答!
请问一个图片可以通过运算显示物体或人物的轮廓吗?

18

主题

82

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2007-10-18 22:03:00 | 显示全部楼层

Re:游戏中的问题

可以的,唐明理的《学VC编游戏》中有一个函数
void TransparentBlt2( HDC hdc0,                // 目标DC
                                        int nX0,int nY0,// 目标偏移
                                        int nW0,int nH0,// 目标宽高度
                                        HDC hdc1,                // 源DC
                                        int nX1,int nY1,// 源起点
                                        int nW1,int nH1,// 源宽高度
                                        UINT Tcol                // 透明色,COLORREF类型
                                        )                        //透明显示[4章]
{//A、建立图形资源。
        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);

//B、拷贝或压缩拷贝源DC中的位图到临时hDC中。
        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);
//C、生成掩码位图。
       
        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));                        // 黑色


        //D、透明显示
        BitBlt(hdc0,nX0,nY0,nW0,nH0,mDC,0,0,SRCAND);        //"与"运算,在hdc0生成掩模
        BitBlt(hdc0,nX0,nY0,nW0,nH0,hDC,0,0,SRCPAINT);        //"或"运算,生成最终透明效果       
//E、以下为释放资源
        SelectObject(hDC, oldBMP);                               
        DeleteDC(hDC);
        SelectObject(mDC, oldmBMP);
        DeleteDC(mDC);
        DeleteObject(hBMP);
        DeleteObject(mBMP);
}

但是我带现在还搞不懂这个函数的原理

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2007-10-18 23:24:00 | 显示全部楼层

Re:游戏中的问题

楼上的那个是用GDI做的
去看看WIN32编程的书吧

会懂的
这些不算太恐怖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-20 04:40

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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