扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:付佳亮 来源:微软社区 2007年11月9日
关键字:
Call DDraw.SetDisplayMode(800, 600, 16, 0, CONST_DDSDMFLAGS.DDSDM_DEFAULT) |
Dim ddsPrimary As DirectDrawSurface7 '设置主面 Dim ddsBackBuffer As DirectDrawSurface7 '设置缓冲面 Public ddsMap As DirectDrawSurface7'设置地图 Public ddsHero As DirectDrawSurface7'设置人物 '定义设置表面 Dim ddsd As DDSURFACEDESC2 '表面 '为屏幕建立一个后备缓冲区 ddsd1.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS Or CONST_DDSURFACEDESCFLAGS.DDSD_BACKBUFFERCOUNT ddsd1.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_PRIMARYSURFACE Or CONST_DDSURFACECAPSFLAGS.DDSCAPS_FLIP Or CONST_DDSURFACECAPSFLAGS.DDSCAPS_COMPLEX ddsd1.lBackBufferCount = 1 ddsPrimary = DDraw.CreateSurface(ddsd1) '设置后备缓冲区 Dim caps As DDSCAPS2 caps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_BACKBUFFER ddsBackBuffer = ddsPrimary.GetAttachedSurface(caps) ddsBackBuffer.GetSurfaceDesc(ddsd4) '载入画面初始化 ddsd2.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS Or CONST_DDSURFACEDESCFLAGS.DDSD_HEIGHT Or CONST_DDSURFACEDESCFLAGS.DDSD_WIDTH ddsd2.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_OFFSCREENPLAIN ddsd2.lWidth = ddsd4.lWidth ddsd2.lHeight = ddsd4.lHeight '读取地图 ddsMap = DDraw.CreateSurfaceFromFile("Map\001.bmp", ddsd2) '载入精灵 ddsd3.lFlags = CONST_DDSURFACEDESCFLAGS.DDSD_CAPS ddsd3.lHeight = CONST_DDSURFACEDESCFLAGS.DDSD_ALL ddsd3.ddsCaps.lCaps = CONST_DDSURFACECAPSFLAGS.DDSCAPS_OFFSCREENPLAIN '读取人物 ddsHero = DDraw.CreateSurfaceFromFile("BMP\H00.bmp", ddsd3) '把人物从背景中抠出来,用Key设置背景色 Dim key As DDCOLORKEY '这里的背景色为黑色 key.low = 0 key.high = 0 ddsHero.SetColorKey(CONST_DDCKEYFLAGS.DDCKEY_SRCBLT, key) '在后备缓存中绘制地图 Dim rMap As RECT ddsBackBuffer.BltFast(0, 0, Map.ddsMap, rMap, CONST_DDBLTFASTFLAGS.DDBLTFAST_WAIT) '在后备缓存中绘制人物 Dim rPlayer As RECT Dim ddrval As Boolean 'rPlayer表示从图片中截取那块,从哪到哪。如果你打开很多游戏的位图看看的话你会发现一个人物的多种动态往往放在一张位图中,截取其中的不同块显示出来就形成了动画。 '表示从(0,0)这个位置开始取 rPlayer.Top = 0 rPlayer.Left = 0 '表示取到(32,32)这个位置 rPlayer.Right = 32 rPlayer.Bottom = 32 '其中0,0表示绘制的位置。 ddrval = ddsBackBuffer.BltFast(0, 0, ddsHero, rPlayer, CONST_DDBLTFASTFLAGS.DDBLTFAST_SRCCOLORKEY Or CONST_DDBLTFASTFLAGS.DDBLTFAST_WAIT) '好了,后备缓存已经绘制完成了,可以翻转过来了,其实写屏的方法就是不停的翻转主面和缓存面 ddsPrimary.Flip(Nothing, CONST_DDFLIPFLAGS.DDFLIP_WAIT) |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者