(100分酬谢)--==在DirectX中画线问题--=

game_sage 2002-08-05 03:30:24
HDC hdc;
lpDDSBuffer->GetDC(&hdc);
HPEN hpen = CreatePen (PS_SOLID, 5, RGB(0, 0, 0));
SelectObject (hdc, hpen);
MoveToEx (hdc, 100, 100, NULL);
LineTo (hdc, 200, 100);
lpDDSBuffer->ReleaseDC(hdc);
//---------------------------------------------------
我把上面的程序加在游戏中循环显示,最多10秒种,就弹出对话框,说系统资源用完了,我 把程序最小化后,发现GDI资源不足10%。
各位,要如何解决呢,有没有别的画线的方法??
...全文
113 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
IO_X 2002-08-11
  • 打赏
  • 举报
回复
SelectObject()返回老的绘图工具,应该用个HOBJECT对象保存
hpen用完后把原来的HOBJECT用SelectObject选回去...

画线用DDSurface7->Lock后直接写屏
robocap 2002-08-09
  • 打赏
  • 举报
回复
同意uno(钢盅郭子)

GetDC SelectObject ReleaseDc不要和画线的程序段放在一起~~
lin_little 2002-08-06
  • 打赏
  • 举报
回复
最快的方法永远处于探索中,你应根据你的具体开发环境进行方法的选择,不过就目前而言,bresenham算法是公认的画线好算法,你如果想更快,可以用汇编写并进行各种优化.
uno 2002-08-06
  • 打赏
  • 举报
回复
我给你的就是
game_sage 2002-08-05
  • 打赏
  • 举报
回复
有没有快一点的画线,或画点的方法呢?谢谢各位了
lin_little 2002-08-05
  • 打赏
  • 举报
回复
你在DX中画线首先应判断使用的分辨率,因为不同分辨率下内存中数据格式不同,比如24位色下是按8:8:8的格式存放图像数据的.然后你就可以用bresenham算法画了.这与以前DOS下的直接写屏一个模式.注意,如果是编写游戏,千万不要使用GDI,那样太慢.
uno 2002-08-05
  • 打赏
  • 举报
回复
从书上抄来的
:P
源代码我可以mail给你
12KB


DDSURFACEDESC2 ddsd; // a direct draw surface description struct

memset(&ddsd,0,sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);

if (FAILED(lpddsprimary->Lock(NULL, &ddsd,
DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,
NULL)))
{
// error
return(0);
} // end if

// now ddsd.lPitch is valid and so is ddsd.lpSurface

// make a couple aliases to make code cleaner, so we don't
// have to cast
int mempitch = (int)ddsd.lPitch;
UCHAR *video_buffer = (UCHAR *)ddsd.lpSurface;

// plot 1000 random pixels with random colors on the
// primary surface, they will be instantly visible
for (int index=0; index < 1000; index++)
{
// select random position and color for 640x480x8
UCHAR color = rand()%256;
int x = rand()%640;
int y = rand()%480;

// plot the pixel
video_buffer[x+y*mempitch] = color;

} // end for index

// now unlock the primary surface
if (FAILED(lpddsprimary->Unlock(NULL)))
return(0);
ninny 2002-08-05
  • 打赏
  • 举报
回复
up!!!!
game_sage 2002-08-05
  • 打赏
  • 举报
回复
能否给出一点点代码?谢谢!
uno 2002-08-05
  • 打赏
  • 举报
回复
你的资源耗尽问题是由于创建了Pen却没有释放的缘故
把CreatePen放到循环外
最好把GetDC、SelectObject和ReleaseDC也放到外面去
uno 2002-08-05
  • 打赏
  • 举报
回复
你这样画?
-_-0

DX中画点应该是:
得到Surface地址
锁定Surface
定位坐标在Surface缓冲区内的偏移量
写入像素颜色索引值或RGB值(根据颜色模式)
解锁Surface

画线么,根据线的算法画一串点

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧