【诈尸项目】【COOLWIND2D游戏引擎 Beta1.2】
vb吧
全部回复
仅看楼主
吧务
level 13
秋枫萧萧 楼主
在YY菌 @yjryym 的鼎力支持下,时隔7年的VB DX9游戏引擎项目重启更新!
[献花]
beta 1.2 更新日志:
1、修复了老版本部分BUG,主要包括:
1.1 层级不正确,现已按绘制顺序。
1.2 图形绘制的坐标未偏移0.5,现已修正。
1.3音频短路径问题在Win10上失效,现已使用双引号进行修正。
2、增加了部分可选参数(初始化时可以指定整个场景缩放倍数、加载和绘制图片提供了默认颜色参数、CWPlayMusic最后一个参数默认恢复播放)
3、CWPaintPic系列函数增加很多扩展
4、文字功能增加了CWPrintFontTop(绘制顶层文字,有利于性能提高)和CWCalcrFont(计算文字的矩形大小)
5、增加了CWPaintPicFlush(主动提交精灵渲染)
6、增加了CWPicGetPixel(动态获取图片任意像素点的颜色值,可以用于点击区域检测)
7、输入设备增加了前后台检测(防止在后台检测被杀毒软件误当记录键盘的木马)
8、鼠标🖱优化了是否在窗口上的逻辑,并增加了后退、前进键的检测
9、键盘⌨的检测由GetKeyState改成GetAsyncKeyState
10、增加了手柄🎮设备的支持
11、其他性能和细节优化
引擎地址: pan.baidu.com/s/119pWDyPIob88qfhQYpoaaQ 提取码: 4qdr
如果有好的意见或建议,也可以加入我们CoolWind游戏编程研究会:112915633
2021年03月06日 22点03分 1
吧务
level 13
秋枫萧萧 楼主
[疑问]可恶啊,GIF太大之后不会动了!!
2021年03月06日 22点03分 2
看来以后得用外链来挂大gif才行[汗]
2021年03月08日 04点03分
level 11
难道游戏大部分内容都放在一个Form_Load事件中吗[疑问]
2021年03月07日 00点03分 3
@DiverAZAM 做一般应用程序的时候,如果确实需要AutoRedraw来保持持久性绘制,最好是用PictureBox控件开AutoRedraw,而不是Form。因为Form开AutoRedraw会创建整个显示器大小的后备缓冲区(在高清屏下运行内存开销太大了),PictureBox的AutoRedraw只占PictureBox自身大小。
2021年03月08日 04点03分
游戏就是个循环,放Form_Load就可以,Load中先me.show,然后引擎循环渲染,否则窗口显示不出来,可以大部内容都可以放Form_Load,写好相关函数在Load循环调用,如果不依懒KeyDown等事件,用GetAsyncKeyState就可以,而且比KeyDown等事件要延时低,动作类游戏KeyDown效果很差
2021年03月07日 12点03分
@隨風🍁缒夢 我再问一个,所有窗体Form_Load中都先me.show,那么窗体AutoRedraw属性就完全不用管了是对的吗?
2021年03月07日 13点03分
@DiverAZAM VB写的游戏,游戏循环之前都是Me.show,可以参考网上的示例都是如此,除非Sub Main编程(我用这种),则都是写Sub Main中的,除了游戏不推荐在其他程序的Form_Load中调用Me.show,AutoRedraw在DirectX中是无效的
2021年03月07日 13点03分
level 13
[大拇指]DrawPrimitiveUp需要偏移0.5,但比sprite绘图快,我自己做传奇也封装一个DX9引擎,只适合自己用,D3DX9_XX.dll导出的D3DXCreateTextureForm系列的函数创建纹理相当慢,我传奇只用Bmp自己结合GDI函数封装的创建纹理函数快了好4倍以上
2021年03月07日 10点03分 4
结合GDI+函数创建png也比D3DX9_XX.dll导出的D3DXCreateTextureForm要快一点,我测试过只是速度不太明显,大概提升20%左右
2021年03月07日 11点03分
@隨風🍁缒夢 我也研究过GDI+和DX9的交互,只是没测过用GDI+和D3DX哪个加载图片更快[真棒]
2021年03月08日 04点03分
@yjryym GDI+加载图片后LockBits得到ARGB值,纹理也锁定,然后CopyMemory过去就行,只是速度提升不太明显,至于用不用还是看情况
2021年03月08日 09点03分
@隨風🍁缒夢 不需要CopyMemory,这样GDI+还会产生额外的内存分配开销,GDI+在LockBits时指定ImageLockModeUserInputBuf模式,这样GDI+内部就会把转换结果写入你传入的地址中(直接传入DX地址就可以了)。至于用不用的情况在我的看法就是,要脱离D3DX依赖时就很有必要。
2021年03月09日 03点03分
level 13
看了下你的源码,发现你代码中处理图像还是用了Sprite.Draw(Flush提交),点线用了DrawPrimitiveUp,如果没有调用Flush函数提交,这样就存在一个问题(Sprite先绘制,DrawPrimitiveUp后绘制,原本应当显示的是DrawPrimitiveUp覆盖Sprite,而Sprite没调用Flush就会Sprite覆盖DrawPrimitiveUp的图像,这就是你代码中说的分层问题),我以前也是用Flush解决的。由于之前一直处理不好DrawPrimitiveUp的0.5问题,图像模糊一直未采用DrawPrimitiveUp绘图,前段时间处理好DrawPrimitiveUp发现比Sprite效率高不少,也解决了分层问题,这样不需要调用Flush和Sprite.Draw
2021年03月07日 13点03分 6
@yjryym 我就是发现他的层级有问题,才给他补的Flush。
2021年03月08日 02点03分
D3DXSprite内部也最终调用的DrawPrimitive那些函数,处理好了的话确实DrawPrimitiveUP更快,不过要处理的还是很多,后妻肯定会全部替换成不用Sprite的,目前不用Sprite最麻烦是文字绘制的问题,D3DXFont需要通过D3DXSprite来画。
2021年03月08日 02点03分
DrawPrimitiveUP的0.5问题我前年也研究出来了,因为DX9把画布的第一个像素中心设成的原点,所以导致真正的左上角坐标变成了(-0.5, -0.5),这个问题坑🕳了我几年。
2021年03月08日 02点03分
@yjryym 0.5的问题还是严重的,如果是画点、线、矩形都不太感觉得出来,但DrawPrimitiveUP绘制纹理就会出模糊现象
2021年03月08日 09点03分
level 13
@yjryym Sub Main写游戏没有windows功底写不了,sub Main后VB的窗体都不用了,直接RegisterClass注册窗口类(优点是可以自定窗口类名、样式还有窗口处理函数),然后CreateWindow创建窗口,这样在处理消息时不需要调用SetWindowLong来子类化窗口
2021年03月08日 09点03分 8
但如楼主所说,这个相当麻烦,消息都得自己处理
2021年03月08日 09点03分
谁跟你说了用Sub Main就不能用VB的Form?Form1.Show后再游戏循环,每次循环DoEvents一次啥都解决了。
2021年03月09日 02点03分
@yjryym 不是不能用,只是没必要了,即然从Sub Main开始写就直接用CreateWindow来得创建容易些,我是这样想的
2021年03月09日 02点03分
@隨風🍁缒夢 我用VC写程序也几乎不RegisterClass,因为系统已经给我们提供了很多现成的窗口类(对话框、按钮、文本框、静态控件、列表控件等)。写游戏的时候,我就是直接创建一个空对话框来画图,省去90%的窗口注册、创建、消息循环等代码[滑稽]
2021年03月09日 02点03分
level 11
其实可以考虑一下移植SDL2到vb6(都是c接口)相比自己封装dx,SDL已经很成熟了,比如窗口管理、鼠标游戏手柄的消息、音频输出、图片加载库等。而且同时支持gpu加速和cpu绘图
2021年03月08日 16点03分 9
你可以来移植一下嘛,我可以给你提供轻量级COM的技术支持(无需注册,跟DX一样直接引用tlb就能用)[滑稽]。
2021年03月09日 02点03分
这个真的有,builds . wohlsoft . ru/win32/SDL-Mixer-X-MinGW-w32-MinSizeRel-Win32-VB6-Binding.7z
2021年03月18日 10点03分
@vkdfkc 这玩意是我玩另一款vb6游戏的时候弄到的,一个俄罗斯人为了适配游戏写的
2021年03月18日 10点03分
@vkdfkc 不过可惜的是只实现了音频
2021年03月18日 10点03分
吧务
level 13
https://tieba.baidu.com/p/7260015242?red_tag=3152118050
好了,加上3D部分的视频,证明哈
2021年03月13日 12点03分 12
1600*900明显有丢帧的情况,不过只丢一帧影响不大[吐舌]
2021年03月13日 12点03分
level 2
我居然等到了1.2版[真棒]
2021年03月18日 05点03分 13
再等等,你还可以等到1.3版本[滑稽]
2021年03月19日 02点03分
@yjryym 或者1.4[滑稽]
2021年03月19日 17点03分
@《顾名思义》 你还是等到2028年农历五月看看能到哪个版本吧[滑稽]
2021年03月20日 02点03分
@yjryym 别啊,你做出一点就更新一个版本不就很快1。4了么?
2021年03月22日 13点03分
1