科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件用VB.NET实现你的游戏梦想

用VB.NET实现你的游戏梦想

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

开发游戏需要对DirectX的调用,原来除了C 没有其他语言可以胜任这份工作

作者:付佳亮 来源:微软社区 2007年10月15日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
然后设置DirectDraw得显示模式

Call DDraw.SetDisplayMode(800, 600, 16, 0, CONST_DDSDMFLAGS.DDSDM_DEFAULT)

  800,600表示屏幕尺寸,16表示16位真彩

  然后定义缓存用于存储图片

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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章