yjryym
yjryym
关注数: 7
粉丝数: 160
发帖数: 15,523
关注贴吧数: 7
【DirectX】【VB】用VB6原生语法实现实现DX绘图(测试) 原帖来源:【DirectX】【VB】用VB6原生语法实现实现DX绘图(测试) http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.0xaa55.com%2Fthread-26577-1-1.html&urlrefer=5640d37c0f9cdc9059247412c6032dc1(出处: 技术宅的结界,转载请保留出处。) 技术交流QQ群(有技术问题或发现新的BUG均可来反馈): 112915633 CoolWind游戏编程研究 79221561 VB游戏(GDI OpenGL DirectX) 264417277 0xAA55技术宅的结界 先看效果:当年刚学VB还没到一年的时间就在想VB的Form、PictureBox、Printer、UserControl、UserDocument这些控件或类的成员里面除了我们平常用到的方法和属性外,居然还有关键字(Scale、PSet、Line、Circle、Print),就很好奇这些关键字的成员是怎么实现的,然而自己定义方法这些关键字根本没法使用(因为关键字不能作为标识符使用)。直到十二年后的最近一段时间终于发现了VB隐藏了多年的小秘密,这也成功让我实现了自己写的类库创建的对象也能支持这些成员关键字操作。 于是,我便想到VB自带的绘图是基于GDI的,绘图效率低不说,还不支持Alpha混合。既然这样,干脆我就自己来实现一个DX版的VB图形库吧,让VB原生语法操作获得GPU硬件加速功能。 Dim dxgw As GraphWindow ' 定义DX绘图窗口变量 ... ... ' 这里省略部分初始化代码 Set dxgw = CreateGraphWindow(初始化参数) ' 创建DX图形窗口 dxgw.Cls [背景颜色] ' 对DX画布清屏处理(背景颜色可选) dxgw.Scale (X1, Y1)-(X2, Y2) ' 设置画布的绘图区域 当前光标X = dxgw.CurrentX ' 获取当前输出光标的横坐标位置 当前光标Y = dxgw.CurrentY ' 获取当前输出光标的纵坐标位置 dxgw.CurrentX = 当前光标X ' 设置当前输出光标的横坐标位置 dxgw.CurrentY = 当前光标Y ' 设置当前输出光标的纵坐标位置 dxgw.Scale ' 重置画布的绘图区域为默认 dxgw.PSet [Step](X, Y), [输出颜色] ' PSet操作必须指定坐标,坐标前加上Step表示相对于 dxgw.CurrentX 和 dxgw.CurrentY 的相对坐标,不加则是绝对坐标,颜色可选 读取颜色 = dxgw.Point(X, Y) ' 和VB原生的操作一样,可以取出DX画布中的对应点的颜色值。 dxgw.Point(X, Y) = 写入颜色 ' 和VB原生的操作不一样的是,DX的Point不再是方法,而是可赋值的属性(赋值表示修改DX画布中的颜色值)。 dxgw.Line [[Step](X1, Y2)]-[Step](X2, Y2), [Color], [B[F]] ' 直线与矩形用法:B 表示画矩形框,BF 表示画填充矩形,否则在两点之间画一条直线。 dxgw.Circle [Step](X, Y), Radius, [Color], [Start], [End], [Aspect] ' 画圆、椭圆、弧形、扇形用法:Radius为负数表示画填充(否则画线框),Start和End为负数表示画扇形(否则为弧形) dxgw.Print 数据1; 数据2, 数据3; Spc(相对定位); 数据4; Tab(绝对定义); 数据5 ' 文本打印(Print 有 ; , Spc Tab 四种输出定位调整控制) dxgw.PaintPicture 图片对象, X1, Y1, [Width1], [Height1], [X2], [Y2], [Width2], [Height2], [Color] dxgw.Refresh ' 将画布的缓存刷新到窗口(提示:在创建dxgw时启用了垂直同步功能的话,此操作将会等待显示器实际刷新,等待期间不占用CPU和GPU) 这里只大概介绍一下,具体的详细用法请下载附件查看测试Demo中的例子。
kernel32自带的Beep太弱了,来试试我的改进版本😂。 链接: http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fpan.baidu.com%2Fs%2F1AJNwZGG_nwZQowz5_n2WrQ&urlrefer=10122182b7c805ba4ee48d440a45b910 提取码: rd5u ' 异步版 Beep,作者YY菌,技术交流群(QQ):250264265 Option Explicit ' 首先需要定义一个 AsyncBeep 类型的变量,并实例化为对象。 Dim asb As New AsyncBeep Private Sub Command1_Click() ' 调用对象的 Play 方法播放指定频率的蜂鸣声(参数和 kernel32 的 Beep 完全一样,区别是此方法不会卡住界面) asb.Play 320, 1750 ' 此方法是不会卡住界面的 End Sub Private Sub Command2_Click() ' 将频率和时长都指定为0可强制停止播放(不传参数默认都为 0, 0) asb.Play End Sub
VB6使用ActiveMovie组件实现音频特效 一楼不说太多,防止被吞,直接上图:
【DirectX】牛年马月神作——高仿微软dx8vb.dll重制版开源了 #【DirectX】牛年马月神作——高仿微软dx8vb.dll重制版开源了#二进制文件及其源码均在原帖附加中,有需要的吧友可以过去下载。 原帖来源:【DirectX】【VB】牛年马月神作——高仿微软dx8vb.dll重制版(优化、BUG修复、开源)http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fwww.0xaa55.com%2Fthread-26515-1-1.html&urlrefer=cee8efa89ab099d87b3361b873bff064(出处: 技术宅的结界,转载请保留出处。) 技术交流QQ群(有技术问题或发现新的BUG均可来反馈): 112915633 CoolWind游戏编程研究 79221561 VB游戏(GDI OpenGL DirectX) 264417277 0xAA55技术宅的结界 用VB写过DirectX程序的开发者基本上都知道微软开发过VB专用版的DX类库 dx7vb.dll 和 dx8vb.dll,这俩dll至今已有二十来年的历史了,这些年间有不少VB开发者用其开发出了优秀作品,但是绝大多数开发者都只使用了DX的图形图像功能,经过我本人的研究发现dx8vb.dll里面相对用的较少的功能有重大BUG,可是这么多年过去了发现的人少之又少,而微软官方又从来没有修复这些BUG,于是我决定自行修复。我们再来看看,从Vista后系统也不再内置这两个dll了,要用的话需要发布时打包,既然要打包那干嘛不打包个已修复过BUG的版本呢? 本次发布的dx8vb.dll重置版,基于DirectX8.1开发,需要注意的是微软官方的dx8vb.dll有8.0和8.1两个版本,并且这两个版本有一部分接口互不兼容。本人目前是重置的8.1版本,并与微软官方的8.1版本完全相互兼容,原8.0的开发者如需使用,可能需要修改部分代码后重新编译后才能使用。因为不同版本的dx8vb.dll之间存在的不兼容问题,我提供了绿化清单文件(使用方法和XP控件主题的manifest一样),这样可以让exe不走注册表调用此dll(IDE下使用仍需注册),避免与别人电脑上已安装的版本冲突问题。 免责声明:本重置版及其源码都仅用于个人性质的学习参考和技术研究,从未有意标榜或冒充是微软官方产品。如有商用行为或造成版权纠纷等侵犯微软公司合法版权的行为,一切后果将由肇事者自行负责。
请问帝国时代决定版捆绑包怎么样?和单独购买1和2有什么区别? 作为小时候的经典游戏,现在出了高清重制版想重新回归一下,但在购买之前有一些疑问,想问问大家。 就是1和2都要买的话,买捆绑包和单独购买1和2是否一样?还是有一些区别?还有就是增强图像包对捆绑包和单独购买是否都有用?应用商店里面显示增强图像包只有英文版,会不会影响中文显示?
WaveOut COM版本,实现VB6音频处理。 链接: http://tieba.baidu.com/mo/q/checkurl?url=https%3A%2F%2Fpan.baidu.com%2Fs%2F1oKscISOnRD_REfoC0Kmp0w&urlrefer=c9ed5dcd71a7250e79b03f280199b1ac 提取码: vf9c(包含源码) 在VB6中,图像处理还是很常见的,但是音频处理的资料非常少,会的人也不多,微软虽然在 winmm.dll 中提供了 waveOut 的相关API,但是对VB6开发者不是很友好,使用起来非常繁琐,再加上VB6开发者又是以非专业人士为主,所以我就用VC把 waveOut 封装成对VB6更友好的COM接口,并且大大简化了其细节处理,并且模仿GDI的位图处理函数,实现了相似用法的音频处理函数。 IWaveOutBuffer woBuf1, woBuf2; … … woBuf1.DrawWaved Me.hDC, X坐标, Y坐标, 宽度, 高度 ' 将音频缓冲区1内的全部数据绘制成波形图 woBuf2.DrawWaved Me.hDC, X坐标, Y坐标, 宽度, 高度, 起始位置, 采样点数 ' 将音频缓冲区2的子区域数据绘制成波形图 woBuf1.BitBlt 目标位置, 采样点数, woBuf2, 来源位置 ' 把音频缓冲区2的一部分数据拷贝到缓冲区1中。 woBuf2.StrectBlt 目标位置, 目标采样点数, woBuf2, 来源位置, 来源采样点数 ' 把音频缓冲区2的一部分数据缩放到缓冲区1中(可以实现对波形的拉伸)。 整数采样数据 = woBuf1.SampleValue(下标) ' 获取音频缓冲区1中的整数数据(类似GDI的GetPixel) woBuf2.SampleValueF(下标) = 浮点采样数据 ' 修改音频缓冲区2的浮点数据(类似GDI的SetPixel) woBuf1.GetBufferBits 数组缓冲区(起始下标), 数组缓冲区大小, 起始位置, 读取采样点数 ' 读取音频缓冲区1的数据到VB的数组中(类似于GDI的GetBitmapBits) woBuf2.SetBufferBits 数组缓冲区(起始下标), 数组缓冲区大小, 起始位置, 写入采样点数 ' 写入VB的数组数据到音频缓冲区2中(类似于GDI的SetBitmapBits) woBuf1.GetWaveFotmat ' 获取音频缓冲区格式 wobBuf2.GetAddress ' 获取音频缓冲区的数据地址(可以动态读写里面的音频数据,类似GDI的DIB位图操作) 更多用法在压缩包的例子里面有,这里就不过多介绍了。
VB6位运算扩展(实现高效位移和字序交换) VB6实现高效位运算的模块在图片中(右键另存为,改扩展名为rar)。提示生成exe时可以注释掉VBBitOperator.bas中DebugMode,这样生成exe后就会启动ShellCode指令进行硬件加速(注意IDE下不支持此项功能)。 VB6位操作说明前缀名称: Shl 为逻辑左移,低位补0。 Shr 为逻辑右移,高位补0. Sha 为算法右移,符号位不会变。 Rol 为循环左移,高低位互补(位移次数为负等于循环右移) Ldexp 为浮点数缩放(位移次数为正数代表左移,负数代表右移),通过对浮点数的指数位加减或底数位位移(当指数位为0时),快速实现 X * 2 ^ Y。 Bswap 为字序交换,大小端互换(主要用于网络通信)。 Flt2Int 为浮点数重解释为整数,和CLng、CCur不同的是,此转换方式直接把浮点数内存数据转成整数,而不是对浮点数取整。 Int2Flt 为整数重解释为浮点数,和 Flt2Int 的作用刚刚相反后缀数字: 8 对8位(1字节)数操作(Byte) 16 对16位(2字节)数操作(Integer) 32 对32位(4字节)数操作(Long、Single) 64 对64位(8字节)数操作(Currency、Double)
1
下一页