科技行者

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

知识库

知识库 安全导航

至顶网软件频道用Visual Basic.NET实现你的游戏梦想

用Visual Basic.NET实现你的游戏梦想

  • 扫一扫
    分享文章到微信

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

    游戏开发是许多程序员的梦想,看着游戏中那华丽的画面。有多少人会感叹,如果自己能做就好了。   然而开发游戏需要对DirectX的调用,原来除了C 没有其他语言可以胜任这份工作,虽然DirectX7.0SDK加入了对VB的支持。

作者:中国IT实验室 来源:中国IT实验室 2007年10月2日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)

  



'在后备缓存中绘制地图

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)



   制作2D游戏的基本知识就这些了,我们现在来说一下游戏的构架。我们以一个简单的回合制RPG游戏为例。

  我建议把所有DirectX的接口全部封装起来。这样操作起来方便很多。

  游戏中需要英雄类、物品类、怪物类、地图类

  首先先说英雄类包含的内容有HP、MP、技能、身上装备、所会武功、人物坐标。

  其中比如所会技能此技能等级,做成一个自定义类型,方法是

Public Structure myGest

Public GestID As Int16 '武功编号

Public GestLV As Int16 '武功等级

End Structure

  比如最多会十种就可以定义为Public Guest(9) As myGest

  同样的道理人物坐标也一样

Public Structure myXY

Public iX As Int16 'X轴坐标

Public iY As Int16 'Y轴坐标

Public iAsp as Int16 '头朝的方向

End Structure

  当然还有其他的一些属性,这里就不一一列举了。

  物品类

  比如物品分种类的,每种物品功能不同,比如头盔就不能装备在身上当然也不能吃,这里我们用到一个枚举类型,定义方法是

Public Enum myResClass '物品分类

Head '头装备

Body '身上装备

Hand '手上装备

Eat '食品

Other '其他

End Enum

Public ResClass As myResClass '物品类型

End Class

  其它当然还有很多属性,如名称,重量,性能等等。

  怪物类

  类似于英雄类有也相似的属性。

  地图类

  这里我们把显示得地图单独拿出来作为一个类,是因为,一张地图并不是每个地方都可以走的,从位图中可是很难识别出那些是阻挡物的。并且地图上还有一些NPC,可以与其对话等等。这一切都要从地图文件中读取。

  地图文件象一张二维表,与你地图位图相对应,比如人物向上移动TOP-=5然后判断,现在所在点在二维表中是否可以行走,是否有阻挡,如果阻挡取消操作,人物不做移动。

  然后设定整体流程,为了操作不会因按键点击速度而影响移动速度,所以我们用时间来控制,设置一个Timer控件,然后根据当前状态不同而设定操作的不同,比如操作开始界面、移动模块、对话模块、战斗模块、交易模块、主菜单模块。当前状态用iNowState变量存储

Select Case iNowState

Case 0

'开始界面

Case 1

'移动模块

Case 2

'对话模块

Case 3

'战斗模块

Case 4

'交易模块

Case 5

'主菜单

End Select

用eInput来存储键盘事件。定义如下:

Public eInput As System.Windows.Forms.Keys = Keys.None

'读取存储键盘信息

Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)

eInput = e.KeyCode

end sub

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

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