游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5326|回复: 12

VB痴迷者,VB游戏渴热者!——————希望好心人能帮帮我

[复制链接]

5

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
QQ
发表于 2005-4-10 13:49:00 | 显示全部楼层 |阅读模式
惨淡的大学生活业已逝去了一年半了!!
在这过去的一年半里,我曾扪心自问了多遍:
  “你来大学干什么?”
  “这一年半的时间你干什么了?”
  ”这一年半的时间里你又学到了些什么?“
  ”大学毕业之后,你认为你能在计算机上干些什么?“
一连几个夜,这几个问题曾经反复在梦境里浮现……
大学了,难道自己还未曾长大,仍然是小孩么?~!
            玩人丧德,玩物丧志!!
   我希望自己不是这种!!!
   
  偶然地,全国计算机等级报考上有了我的名字!!
对于学习早已丧失动力的我,只在考试的最后一星期里就那么一个人关在房里不断地试验再试验!我~~~所有课都没有再去上,每天除了两顿饭之外,我的双眼就未曾离开那17寸显示屏。
考试那天,我花20分钟就把上机题做完了!!!走出考场,我低头看自己那手表,离交卷还有70分钟!这让我突然又明白了自己原来也是爱学习的!!

今天,我想求助GameRes的各位朋友能帮帮我,因为我有了个很坚定的目标:
  我想创造一个属于自己的游戏!!!

人,是为希望而活的,我想我会努力!
  
   但眼下,我遇到的第一个困难是:  
   VB 里 调用 DirectX7.0的问题!
  由于微软除了新版本,我下载不到7.0的帮助文档,学习期间到处都是存在着疑问!!

  期待,GameRes的热心者帮忙解围!!!!
  小弟不甚感激!
  谢谢!!!

                                                                                  QQ290169710
                                           Email:zhengdongdong_888@yahoo.com.cn

9

主题

106

帖子

106

积分

注册会员

Rank: 2

积分
106
QQ
发表于 2005-4-10 14:53:00 | 显示全部楼层

Re:VB痴迷者,VB游戏渴热者!——————希望好心人能帮

  下载DX7的SDK,慢慢看,我也如此。里面有VB部分的应用,通过实例学,还是不错的,只是全E文…………

140

主题

1228

帖子

1233

积分

金牌会员

Rank: 6Rank: 6

积分
1233
QQ
发表于 2005-4-10 15:07:00 | 显示全部楼层

Re:VB痴迷者,VB游戏渴热者!——————希望好心人能帮

我还真不知道你一年半大学干了些什么!
你所需要的文档你就没有用google搜一下么!?
http://www.mydrivers.com/dir10/d4203.htm
其中一个下载地址

打击你一下,全国计算机等级考试就是扫盲性的!如果真对自己什么也没做感到寒心的话!做些什么,远比参加这种考试要强的多!

      你要调dx7得话!应该指的是dx7的com接口!那你是用vb6了!
      首先欢迎你进入vb这个阵营,然后当头棒喝,vb6不是一门适合开发游戏的语言!vb6已经是一门在淘汰边缘的语言!我也不知道你为什么选择dx7开始学习,为vb6么?
      游戏开发是很现实的,vb6很明显已经被淘汰了,你喜欢vb得话,不如用vb.net+dx9,不得不说dx7得com接口封装的一塌糊涂!而dx9得.net接口就好很多了!
      我是本版的一位斑竹,我用vb6很久了,我深切的认识到这是一个门槛很低的语言,可是要用好,太难,而且,落后的语言特性,让他在其他语言面前,毫无竞争力!一个项目大到一定程度,你就会发现落后的语言特性会令你抓狂!
      而vb.net得语言特性吸收了大量java和c++的元素,自然就强大了许多!既然是要学,就学有前途的,来学vb.net吧!vb区,不是为vb6而存在的!

0

主题

1

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2005-4-12 00:59:00 | 显示全部楼层

Re:VB痴迷者,VB游戏渴热者!——————希望好心人能帮

斑竹说得挺夸张的,VB的界面编程不是挺好用的么

248

主题

2674

帖子

2702

积分

金牌会员

Rank: 6Rank: 6

积分
2702
QQ
发表于 2005-4-14 17:44:00 | 显示全部楼层

Re:VB痴迷者,VB游戏渴热者!——————希望好心人能帮

vb确实要被淘汰,也许java和c++谁要淘汰谁,各有说法,但是java1.5是一定要淘汰java1.0的。这是明摆着的事实。
应该正视问题。
但是,问题并不严重,毕竟任何新陈代谢都是一段漫长的时期。
关键是学好技术,语言不过就几个单词。

2

主题

21

帖子

27

积分

注册会员

Rank: 2

积分
27
发表于 2005-4-15 09:32:00 | 显示全部楼层

Re:VB痴迷者,VB游戏渴热者!——————希望好心人能帮

VB6 程序运行郊率太低了,VB.NET没用过

5

主题

15

帖子

15

积分

新手上路

Rank: 1

积分
15
QQ
 楼主| 发表于 2005-5-7 11:40:00 | 显示全部楼层

Re:VB痴迷者,VB游戏渴热者!——————希望好心人能帮

谢谢诸位~!
谢谢斑竹!~

想不到,我的问题终于可以得到解决了呵~!

最近忙啊~!连夜苦背英语~!

图形方面的编程,暑假我会卷土重来~!

66

主题

345

帖子

356

积分

中级会员

Rank: 3Rank: 3

积分
356
发表于 2005-6-9 08:16:00 | 显示全部楼层

Re:VB痴迷者,VB游戏渴热者!——————希望好心人能帮

...总是一些无聊的话题...

7

主题

318

帖子

318

积分

中级会员

Rank: 3Rank: 3

积分
318
发表于 2005-7-30 13:36:00 | 显示全部楼层

Re:VB痴迷者,VB游戏渴热者!——————希望好心人能帮

呵~~

130

主题

2714

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
发表于 2005-7-30 14:49:00 | 显示全部楼层

Re:VB痴迷者,VB游戏渴热者!——————希望好心人能帮

DirectX7.0使用(转载)

DirectX 7.0终于支援VB了,让我们这些VB的爱好者也能享受到DirectX带来的便利,现在我在这里提出使用DirectDraw的心得。使用DirectDraw时可以不用安装DirectX7.0的SDK,只要确定有装DirectX7.0就可以了。

现在我们实际来使用DirectDraw:
在“工程(Project)”里点选“设定引用项目”,来引用DirectX物件。
接著将“DirectX 7 for Visual Basic Type Library”的那一行打勾,就可以开始使用DirectX了。

我们首先得建立DirectDraw物件,先宣告一个Direct物件和一个DirectDraw物件:
Dim objDX As New DirectX7
Dim objDD As DirectDraw7

接下来是使用DirectDrawCreate函式来建立DirectDraw物件:
Set objDD = objDX.DirectDrawCreate("")

然后必须设定是视窗模式还是全屏幕模式:
Call objDD.SetCooperativeLevel(Me.hWnd, DDSCL_FULLSCREEN Or DDSCL_ALLOWMODEX Or DDSCL_EXCLUSIVE)
第一个参数是设定DirectDraw的视窗是那一个,填入视窗的Handle代码而后面的参数是设定具备的能力,可以不止一个,使用Or组合起来。
DDSCL_FULLSCREEN 使用全屏幕(必须和DDSCL_EXCLUSIVE一起用)
DDSCL_ALLOWMODEX 使用Modex模式
DDSCL_EXCLUSIVE 使用独占模式
DDSCL_NORMAL 使用Windows的程式视窗
DDSCL_NOWINDOWCHANGES 禁止改变视窗大小

设定完视窗模式或全屏幕模式后,如果你是设定成全屏幕模式的话(也就是独占模式),接著就必须设定显示模式。
objDD.SetDisplayMode 640, 480, 16, 0, DDSDM_DEFAULT
参数中的640,480指的是640x480的模式,而16指的是16万色,如果是8的话则是256色,想改变显示模式的话只要改变这三个变数就可以了,一般常用的模式有:
320x200 16万
320x240 256
640x480 256
640x480 16万

Surface简介:
Surface就是DirectDraw用的显示记忆体,图像就是要画在Surface上面,一般来说有分成几种类型。
primary surface 屏幕上可以看到的显示记忆体,图像画在上面就能显示在屏幕上。
backbuffer surface 这是一个能跟primary surface作快速切换的Surface。
offscreen surface 这是一个屏幕上看不见的Surface,可以用来存放图像。

我们现在就先来介绍建立primary surface的方法,首先得宣告一个Surface物件和一个DDSURFACEDESC结构。
Dim objDDPrimSurf As DirectDrawSurface7
Dim ddsd1 As DDSURFACEDESC2

'DDSURFACEDESC主要是记录一个Surface的结构,像是Surface的高度、宽度之类的,建立一个primary surface通常只要填入ddsCaps就可以了。
ddsd1.lFlags = DDSD_CAPS '设定DDSURFACEDESC结构中的ddsCaps有效。
ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE '设定要建立的是primary suface。
Set objDDPrimSurf = objDD.CreateSurface(ddsd1) '呼叫CreateSurface后即建立完成。

'offscreen surface的建立法则是要设定DDSURFACEDESC结构中的ddsCaps、dwHeight、dwWidth。
Dim objDDOffSurf As DirectDrawSurface7
Dim ddsd1 As DDSURFACEDESC2

ddsd1.lFlags = DDSD_CAPS Or DDSD_HEIGHT Or DDSD_WIDTH
'设定ddsCaps、lHeight、lWidth有效
ddsd1.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN '设定要建立offscreen surface
ddsd1.lWidth = 640 '设定Surface的宽度
ddsd1.lHeight = 480 '设定Surface的长度
Set objDDOffSurf = objDD.CreateSurfaceFromFile("img1.bmp", ddsd1)
'offscreen surface建立完成并把img.bmp图档读取到offscreen surface里面。

一般来说不会直接在primary surface上直接画图,我通常都是先在backbuffer surface上画,再利用切换的功能将Primary surface和backbuffer surface交换,所以在这里介绍backbuffer surface的建立方法,由於要跟primary surface一起建立,所以Primary surface的建立方法也就有点不同。
Dim objDDPrimSurf As DirectDrawSurface7
Dim objDDBackSurf As DirectDrawSurface7
Dim ddsd1 As DDSURFACEDESC2

ddsd1.lFlags = DDSD_CAPS Or DDSD_BACKBUFFERCOUNT
'设定ddsCaps和lBackBufferCount有效
ddsd1.lBackBufferCount = 1 '设定Backbuffer surface的数量
ddsd1.ddsCaps.lCaps = DDSCAPS_PRIMARYSURFACE Or DDSCAPS_FLIP Or DDSCAPS_COMPLEX
'设定要建立一个由primary surface和backbuffer surface 所构成的Surface
Set objDDPrimSurf = objDD.CreateSurface(ddsd1) 'primary surface建立完成

Dim caps As DDSCAPS2 宣告一个DDSCAPS结构
caps.lCaps = DDSCAPS_BACKBUFFER 设定要建立backbuffer surface
Set objDDBackSurf = objDDPrimSurf.GetAttachedSurface(caps) backbuffer suface 建立完成

我们一共建立了三个Surface,分别是objDDPrimSurf(Primary surface)、objDDBackSurf(BackBuffer surface)、objDDOffSurf(Offscreen surface)。
现在我打算把objDDOffSurf拿来存放图片,再用BltFast()把图片给复制到objDDBackSurf上,然后用objDDPrimSurf的Flip来跟objDDBackSurf作交换的动作,因为objDDPrimSurf代表的就是显示记忆体,所以交换后图片就显示在屏幕上啦!

现在我先介绍BltFast()的用法:
BltFast(dx As Long,dy As Long,dds As DirectDrawSurface7,srcRect As RECT,trans As CONST_DDBLTFASTFLAGS) As Long

dx、dy
图形复制到目标Surface上的位置(座标)
dds
图片来源的Surface
srcRect
复制图形的范围
trans
复制图片的方式
DDBLTFAST_DESTCOLORKEY '使用目标Surface上的透明色
DDBLTFAST_NOCOLORKEY '直接复制图形
DDBLTFAST_SRCCOLORKEY '使用来源Surface上的透明色
DDBLTFAST_WAIT '若暂时无法执行的话就等到可以执行时

例:想把objDDOffSurf上640x480的图形复制到objDDBackSurf
Dim r1 As RECT

r1.left=0
r1.top=0
r1.right=640
r1.bottom=480

objDDBackSurf 0, 0, objDDOffSurf, r1, DDBLTFAST_WAIT

这样就把图形给复制到了objDDBackSurf上了,不过这样也只是在objDDBackSurf上而已,并不是在屏幕上,所以必须跟objDDPrimSurf作Flip才行,怎堋作呢?只要执行下面这一行就可以了:

objDDPrim.Flip Nothing, DDFLIP_WAIT
这么一来图形就出现在屏幕上啦。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-27 15:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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