游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3738|回复: 3

我发现一个BUG

[复制链接]

7

主题

30

帖子

46

积分

注册会员

Rank: 2

积分
46
QQ
发表于 2004-10-15 08:16:00 | 显示全部楼层 |阅读模式
我用的是早期的引擎版本(3.0)。在如下注释地方出现BUG.这个BUG并不是每次都产生,偶尔会出现一次。烦请作者指点一下。并且希望能和作者能有更高层次的合作。

HRESULT CDisplay::_Show( int x, int y, CBitmapX* pBitmapSrc, CBitmapX* pBitmapDest, RECT* pRect, bool bIsColorKey )
{
        // 目的地址指针
        PIXEL* dest = (PIXEL*)pBitmapDest->m_pBuffer;
        dest += y * pBitmapDest->m_nPitchWidth + x;

        // 数据源地址指针
        PIXEL* src = (PIXEL*)pBitmapSrc->m_pBuffer;
        src += pRect->top * pBitmapSrc->m_nPitchWidth + pRect->left;

        // 获得实际需要绘制的宽高
        int nHeight = pRect->bottom - pRect->top;
        int nWidth  = pRect->right - pRect->left;

        if( bIsColorKey )                // 处理ColorKey
        {
                for( register int i=0; i<nHeight; i++ )
                {
                        for( register int j=0; j<nWidth; j++ )
                        {
                                // ColorKey必须为0
                                if( *src != 0 )//***这里有时会出现BUG,调试时src虽然有值,但是编译器提示是错误的指针
                                src++;
                                dest++;
                        }
                        src += pBitmapSrc->m_nPitchWidth - nWidth;
                        dest += pBitmapDest->m_nPitchWidth - nWidth;
                }
        }
        else                                        // 不处理ColorKey
        {
                for( register int i=0; i<nHeight; i++ )
                {
                        wmemcpy( (wchar_t *)dest, (wchar_t *)src, nWidth );//和上面一样,有时src是错误的指针
                        src += pBitmapSrc->m_nPitchWidth;
                        dest += pBitmapDest->m_nPitchWidth;
                }
        }

        return S_OK;
}

1万

主题

1万

帖子

2万

积分

管理员

中级会员

Rank: 9Rank: 9Rank: 9

积分
20356
QQ
发表于 2004-10-15 08:59:00 | 显示全部楼层

Re:我发现一个BUG

说说你如何引发BUG?
比如:你如何绘制图像,并且达到什么样的操作才会产生?

因为是3.0版本的问题,单看代码我无法了解问题,最好能将问题产生原因告诉我,我好进行跟踪调试。

7

主题

30

帖子

46

积分

注册会员

Rank: 2

积分
46
QQ
 楼主| 发表于 2004-10-15 10:39:00 | 显示全部楼层

大概现象是这样的

首先我是启动了一个线程,在线程里循环画图的。至于数据运算等工作是在主线程里完成的,通过一个全局变量来完成参数的传递。

画图代码就类似于:       
GetGraphics()->DrawBitmap(m_nXLeft,m_nYLeft,g_pLeftBitmap,SCREENBUFFER,CRect(x1,y1,x2,y2),true);
参数都主线程通过全局变量传进来的。

问题的出现是偶然的,有时玩了一会后出现此错误,有时玩很久也不出错误,但出现的频率较高。我用DEBUG版时玩时出现断言时,就跟了进去,就是发现在上面所说行中出现了错。

另外是否和编译器设置有关?
还有就是你提供的代码wmemcpy( dest, src, nWidth );这一行是怎么编译过去的?我都是全改为wmemcpy( (wchar_t *)dest, (wchar_t *)src, nWidth );的。

7

主题

30

帖子

46

积分

注册会员

Rank: 2

积分
46
QQ
 楼主| 发表于 2004-10-20 09:36:00 | 显示全部楼层

Re: 我发现一个BUG

作者来看一下啊。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-13 18:47

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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