游戏开发论坛

 找回密码
 立即注册
搜索
楼主: instemast

发现了提升VB6速度的方法(只用VB6解决)

[复制链接]

8

主题

186

帖子

186

积分

注册会员

Rank: 2

积分
186
发表于 2008-7-31 19:01:00 | 显示全部楼层

Re:发现了提升VB6速度的方法(只用VB6解决)

楼主是搞C++的,发此贴主要目的是龌龊游戏之家,让他看不懂

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
 楼主| 发表于 2008-7-31 20:04:00 | 显示全部楼层

Re: Re:发现了提升VB6速度的方法(只用VB6解决)

大元帅: Re:发现了提升VB6速度的方法(只用VB6解决)

VB6连extends都不可以,难道可以implements?很值得怀疑,那还要在接口里面写上虚函数,不可想象


首先,VB6支持方法查询(IDispatch::Invoke),可以模拟多态,但很慢。

然而昨天无意发现了,VB6的确可以 Implements, 包括自己的代码和别人的com接口
(因为都是一样的com规范)。。听说,在写 ie 插件的时候用得很多。

vb6不支持extends是因为com规范的缘故!com只支持接口继承。
(因此 com 也被人们指责为一种“很差的技术”)

8

主题

186

帖子

186

积分

注册会员

Rank: 2

积分
186
发表于 2008-7-31 20:15:00 | 显示全部楼层

Re:发现了提升VB6速度的方法(只用VB6解决)

无论如何提高VB速度,永远也比不上C++,就算是内存增大亿万倍,C++永远快于VB,这是个残酷的现实,为了快速做游戏,就要拿玩家和内存作代价。

0

主题

22

帖子

22

积分

注册会员

Rank: 2

积分
22
发表于 2008-7-31 21:09:00 | 显示全部楼层

Re:发现了提升VB6速度的方法(只用VB6解决)

快不了多少阿,最重要的还是算法,你算法麻烦了用什么语言都慢。

29

主题

475

帖子

483

积分

中级会员

Rank: 3Rank: 3

积分
483
发表于 2008-7-31 23:54:00 | 显示全部楼层

Re: Re: Re:发现了提升VB6速度的方法(只用VB6解决)

instemast: Re: Re:发现了提升VB6速度的方法(只用VB6解决)



首先,VB6支持方法查询(IDispatch::Invoke),可以模拟多态,但很慢。

然而昨天无意发现了,VB6的确可...


好像MFC就可以实现继承,比如用户窗体是继承自窗体类的,并不是COM不支持继承,而是VB不是完全的面向对象,在表面上不支持,不可能每个FORM它都去重新生成代码吧,而且独立平台类库(AWT、SWT和VCL)在WINDOWS中也是继承WINDOWS现有的控件,不可能这么多杂七杂八的语言底层实现的效果都一模一样吧。再怎么说COM是非常成功的技术,虽然现在已经有点过时了。

270

主题

6442

帖子

6446

积分

论坛元老

Rank: 8Rank: 8

积分
6446
发表于 2008-8-1 08:08:00 | 显示全部楼层

Re:发现了提升VB6速度的方法(只用VB6解决)

有两个马甲找封!!
职业吹牛家永远是职业吹牛家,这个论坛的C++程序员制作的游戏已经落后于我的VB6新游戏的技术和速度。

77

主题

485

帖子

486

积分

中级会员

Rank: 3Rank: 3

积分
486
发表于 2008-8-1 08:12:00 | 显示全部楼层

Re:发现了提升VB6速度的方法(只用VB6解决)

MSDN中有.


代码重用的许多(内部)方面


有两种主要的代码重用窗体—二进制和源代码。二进制代码重用,是通过创建和使用一个对象来实现的,而源代码重用,则是通过继承来实现的— Visual Basic 不支持。(源代码重用也可以通过复制和修改源代码来实现,但这种技术没有什么新意,而且存在许多人所共知的问题。)

Visual Basic 已成为二进制代码重用的先驱—控件就是典型的例子。通过将控件的实例放置到窗体上就可以重用该控件中的代码。这被称为包含(containment) 关系或者具有 (has-a) 关系;也就是说,该窗体包含或者具有CommandButton。

详细信息   包含关系在本章后面的“对象模型”作了讨论。

委派给实现的对象
Implements 提供了代码重用的一种强有力的新途径。可以实现一个抽象类(就象在“创建和实现接口”中所讨论的那样),或者也可以实现一个全功能类的接口。可以在外部对象(即,实现内部对象接口的那个对象)的 Initialize 事件中创建内部对象(即,所实现的对象)。

就象在“创建和实现接口”中所提到的那样,接口就象契约一样—必须在外部对象的类模块中实现内部对象接口的所有成员。不过,在委派内部对象的属性和方法为代表方面,可以有很多选择。在一个方法中,可能直接委派一个内部对象为代表,传递未更改的参数,而在另一种方法中,可能执行在调用该内部对象之前自己的部分代码,在第三种方法中仅仅执行自己的代码,而完全忽略内部对象!

例如,假设有一个 OneManBand 类和一个 Cacophony 类,这二者都产生声音。希望把 Cacophony 类的功能添加到 OneManBand 类中,并重用 Cacophony 类方法的一些实现。

'OneManBand 实现 Cacophony 接口。
Implements Cacophony

'保存引用的对象变量。
Private mcac As Cacophony

Private Sub Class_Initialize()
   '创建对象。
   Set mcac = New Cacophony
End Sub

现在,就可以在“对象”下拉菜单上选择 Cacophony,然后为 Cacophony 接口的方法获得过程模板。为了实现这些方法,可以委派给 Cacophony 对象。例如,Beep 方法可能看起来如下所示:

Private Sub Cacophony_Beep(ByVal Frequency As Double, _
ByVal Duration As Double)
   '委派给内部的 Cacophony 对象。
   Call mcac.Beep(Frequency, Duration)
End Sub

上面的实现是非常简单的。外部对象 (OneManBand) 直接委派给内部对象 (Cacophony),不作任何更改即可重用 Cacophony 对象的 Beep 方法。这是一件好事,但仅仅只是个开端。

Implements 语句对于代码重用来说,是一个非常强大的工具,因为它给予很大的灵活性。可能想更改 OneManBand 类的 Beep 方法的效果,方法是在对内部 Cacophony 对象的调用之前(或之后),插入自己的代码:

Private Sub Cacophony_Beep(ByVal Frequency As Double, _
ByVal Duration As Double)
   '撞击每一件东西升高八度。
   Frequency = Frequency * 2
   '基于 OneManBand 类的另一个属性,即 Staccato,
   '分割每个嘟嘟声的持续时间。
   If Staccato Then Duration = Duration * 7 / 8
   Call mcac.Beep(Frequency, Duration)
   '甚至可以调用 OneManBand 的其它方法。
   If Staccato Then Pause(Duration * 1 / 8)
End Sub

对于这些方法来说,实现可能会直接委派内部 Cacophony 对象为代表,而对于另外一些来说,可能在委派之前或之后插入自己的代码—或者甚至完全忽略委派,而完全用自己的代码来实现一种方法。

因为 OneManBand 类实现 Cacophony 接口,所以可以将它和调用该接口的任何音乐应用程序一起来使用。其实现细节可从调用应用程序处隐藏起来,但是结果发出的声音都是自己的。

注意   COM 提供了另一个机制进行二进制代码重用,该机制叫凝聚。在集合中,无更改地重用一个完整的接口,而且该实现是由被凝聚的类的一个实例所提供的。Visual Basic 不支持这种代码重用的窗体。

这样一来不冗长乏味吗?
写委派代码的确可能变得冗长乏味,如果大部分外部对象的属性和方法,只是简单地直接委派给相对应的内部对象的属性和方法的时候,尤其是这样。

如果有 Visual Basic 专业版或企业版,就可以使用“Visual Basic 扩展性”模型,创建自己的委派向导,使任务自动化,类似于专业版和企业版中的“类向导”一样。

详细信息   在部件软件中多态和多重接口的使用,在《部件工具指南》中,“创建 ActiveX 部件”中的“部件设计的一般准则”中作了讨论。

关于“扩展性模型”的使用,在《部件工具指南》中的“用外接程序来扩展 Visual Basic 环境”中作了文档说明。

270

主题

6442

帖子

6446

积分

论坛元老

Rank: 8Rank: 8

积分
6446
发表于 2008-8-1 08:34:00 | 显示全部楼层

Re: Re:发现了提升VB6速度的方法(只用VB6解决)

happyking: Re:发现了提升VB6速度的方法(只用VB6解决)

MSDN中有.

代码重用的许多(内部)方面

有两种主要的代码重用窗体—二进制和源代码。二进制代码重...



用我的游戏来发言吧! v1.01
sf_20088183414.jpg

8

主题

186

帖子

186

积分

注册会员

Rank: 2

积分
186
发表于 2008-8-1 08:50:00 | 显示全部楼层

Re: Re: Re:发现了提升VB6速度的方法(只用VB6解决)

游戏之家站长: Re: Re:发现了提升VB6速度的方法(只用VB6解决)




用我的游戏来发言吧! v1.01

反恐前线刚出窝,BUG竟比代码多

270

主题

6442

帖子

6446

积分

论坛元老

Rank: 8Rank: 8

积分
6446
发表于 2008-8-1 11:14:00 | 显示全部楼层

Re:发现了提升VB6速度的方法(只用VB6解决)

穿越火线更新了这么多版本,人死的时候还是会卡在墙里,或人在空中飞,我的游戏本来就要更新下去。

AZURE是个垃圾,坐在家里就可以振兴中华游戏。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2026-1-21 19:32

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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