ofz 发表于 2014-7-12 14:16:20

drzzm32 发表于 2014-7-12 13:27 static/image/common/back.gif
这样才是技术区嘛。。。
话说你们都是控制在30fps?我是60。。。
干脆今天更新一发,看看5000+的弹幕怎 ...

看这个项目,是基于 node.js 的游戏服务器
https://github.com/wangbin17910/webGLwebsocket

看到 baidu 上 node.js 的平台挺便宜的(一天一毛钱),所以我接下来想玩的就是这个啦!

lrdcq 发表于 2014-7-12 14:23:27

本帖最后由 lrdcq 于 2014-7-12 14:34 编辑

ofz 发表于 2014-7-12 14:12 static/image/common/back.gif
换成台式机的 Chrome 跑了一下,分数涨到2204了



其实现在chrome和firefox的canvas都是自动硬件加速了的,那个10多倍应该是canvas支持硬件加速前的事儿了,差距应该不会太大才对...
另外我那边只是强制两次requestAnimationFrame调用render一次...强制1/2绘画而已了
好吧,我把那两个bench调回到60fps了我的电脑上简直无法直视
另外我这儿应该还是弹幕运算模型太复杂了,所有的弹幕和特效和....反正只要是发射出来的都是这个模型这个主意太糟了,我当时怎么想的

lrdcq 发表于 2014-7-12 15:19:34

本帖最后由 lrdcq 于 2014-7-12 15:22 编辑

我做了一组测试得到了一堆很奇怪的结果

我本机对ofz君的bench1和bench5做了无渲染(GAME.draw置空测试),分别得到的结果是2359和2156(大概在我这里有渲染测试的结果的140%左右)
而我对于我那两个bench进行无渲染测试的结果在6000和1100左右(开始崩溃到30fps,不是30fps以下,和之前提高了300%的样子)

那么结论难道是ofz君这个的性能损耗点在运算,而我这个的性能损耗点在渲染么........
这不科学啊.................................
或者说ofz君的运算代码也涉及到图像显示的运算

drzzm32 发表于 2014-7-12 15:29:59

lrdcq 发表于 2014-7-12 14:23 static/image/common/back.gif
其实现在chrome和firefox的canvas都是自动硬件加速了的,那个10多倍应该是canvas支持硬件加速前的事儿了, ...

这个,我跑了一下第一个DEMO:
这样。弹幕数在3000左右时可以保持60fps。应该要看本机的性能和优化?
因为是网络编程,我没研究过,也就不知道原因了。既然是GL,那么肯定和本机的渲染器有关.

drzzm32 发表于 2014-7-12 15:37:44

本帖最后由 drzzm32 于 2014-7-12 15:45 编辑

然后我试了下自己的游戏(VB .NET & OpenGL)右上是Fps。

5000弹幕弹型1:

5000弹幕弹型2:

10000弹幕弹型2:

然后资源占用:


明显帧率降下来了,况且我这是VB,VB哦~


但是内存占用没那么大。。。


我的判定算法:
估计多亏这个预判定:
Shared Function BulletPreJudge(PlayerX As Single, PlayerY As Single, BulletX As Single, BulletY As Single, SetDistance As Single) As Boolean
            If Math.Abs(PlayerX - BulletX) < SetDistance And Math.Abs(PlayerY - BulletY) < SetDistance Then
                Return True
            Else
                Return False
            End If
      End Function判定:
Shared Function BulletJudge(PlayerX As Single, PlayerY As Single, BulletX As Single, BulletY As Single, SetMinDistance As Single, _
                                    SetMaxDistance As Single) As Integer
            If WDJ_E.Base.MathGroup.Distance2D(PlayerX, PlayerY, BulletX, BulletY) > SetMaxDistance Then
                Return JUDGE_AWAY
                Exit Function
            ElseIf WDJ_E.Base.MathGroup.Distance2D(PlayerX, PlayerY, BulletX, BulletY) > SetMinDistance Then
                Return JUDGE_GRAZE
            Else
                Return JUDGE_MISS
            End If
      End Function
@lrdcq 你发个截图看看?            这个VB也是解释执行啊,不是什么C#,C++的

lrdcq 发表于 2014-7-12 15:50:32

本帖最后由 lrdcq 于 2014-7-12 15:55 编辑

drzzm32drzzm32 发表于 2014-7-12 15:37 static/image/common/back.gif
然后我试了下自己的游戏(VB .NET & OpenGL)右上是Fps。

5000弹幕弹型1:

咦,VB.net也是解释性的么...打包成exe我感觉是编译过的呢....虽然我不了解
JS的话代码网页右键检查元素就看得见啦,你看资源列表下面一堆什么什么.js





真是解释性的么,翻了半天没发现drzzm32君的源码呢,怎么看都是编译的吧

drzzm32 发表于 2014-7-12 16:02:30

本帖最后由 drzzm32 于 2014-7-12 16:05 编辑

lrdcq 发表于 2014-7-12 15:50 static/image/common/back.gif
咦,VB.net也是解释性的么...打包成exe我感觉是编译过的呢....虽然我不了解
JS的话代码网页右键检 ...
本来就是解释性的~
微软为了.NET的兼容性,并没有把程序翻译为二进制代码,依然由框架进行解释执行。.NET语言,包括VB.NET,它们所开发的程序源代码并不是直接编译成能够直接在操作系统上执行的二进制本地代码,而是被编译成为中间代码,然后通过.NET Framework的通用语言运行时(CLR)——执行。 所有的.Net编程语言都被编译成这种被称为MSIL(Microsoft Intermediate Language )的中间代码,这与Java的字节码类似。因此虽然最终的程序在表面上仍然与传统意义上的可执行文件都具有“.exe”的后缀名。但是实际上,如果计算机上没有安装.Net Framework,那么这些程序将不能够被执行。在程序执行时,.Net Framework将中间代码翻译成为二进制机器码,从而使它得到正确的运行。最终的二进制代码被存储在一个缓冲区中。所以一旦程序使用了相同的代码,那么将会调用缓冲区中的版本。这样如果一个.Net程序第二次被运行,那么这种翻译不需要进行第二次,速度会明显加快。
VB.NET代码之所以不直接编译成二进制机器码,是基于.NET跨平台这一目标的考虑。
话说你到哪里去看我的源码?我根本没上传过源代码的说~
进阿本的后(qun)宫就可以看了

lrdcq 发表于 2014-7-12 16:16:40

本帖最后由 lrdcq 于 2014-7-12 16:27 编辑

drzzm32 发表于 2014-7-12 16:02 static/image/common/back.gif
本来就是解释性的~
微软为了.NET的兼容性,并没有把程序翻译为二进制代码,依然由框架进行解释执行。
话 ...
好吧,查到VB.net是中间解释性语言....那不就和java差不多一个意思了么NICE,这样查看代码确实就方便多了.....虽然我拿VB源码也没用。嘛,一般的理解解释性语言=代码随便看...我刚才深入了解了一下VB.NET...确实是这样液话说代码里面还有RPG,AVG之类的坑,真是庞大啊



话说怎么看VB.NET还是比JS快啊,好歹是微软家的强类型语言,和区区网页脚本根本没得比嘛

ofz 发表于 2014-7-12 18:03:30

本帖最后由 ofz 于 2014-7-12 18:56 编辑

lrdcq 发表于 2014-7-12 15:19 static/image/common/back.gif
我做了一组测试得到了一堆很奇怪的结果

我本机对ofz君的bench1和bench5做了无渲染(GAME.draw置空 ...
睡了一觉醒过来,发现你们又折腾出不少东西呢

无渲染是说把 GAME.draw 注释掉, 最后 alert 出结果吗?我的笔记本分数 从 700 多涨到了 3525,台式机从 2200 多涨到 5976 了

另外一点“运算代码也涉及到图像显示的运算”,我稍微没明白是什么意思。我的逻辑(弹幕的运动啊什么的)是和渲染(画图)完全分离的:就是说即使完全不渲染(不调用GAME.draw),程序也会在GAME.run里更新弹幕的位置等信息,因此也是会耗费计算资源的。这样的好处是即使在不同配置的机器上,甚至在没有图像输出的服务器上,游戏的逻辑都会完全相同(我一开始考虑过把它做成网游的,但是因为用了太多函数编程的特性,无法做到完全的数据同步,就放弃了)。所以我觉得这个结果是可以理解的呢
更新:我错了,改完的代码忘记 push 到 github 上,lrdcq 的结果和我的不一样也就不奇怪了

ofz 发表于 2014-7-12 18:12:17

drzzm32 发表于 2014-7-12 16:02 static/image/common/back.gif
本来就是解释性的~
微软为了.NET的兼容性,并没有把程序翻译为二进制代码,依然由框架进行解释执行。
话 ...

楼下 lrdcp 说的对,vb .net 不是解释性的。.net 平台上的三种语言(vb.net, c#, 托管c++),最后都是编译成统一的,跨平台的 msil 代码的(确实跟 java 很像呢)。vs 带了这种 msil 代码的查看器 (ildasm.exe,中文似乎叫 MSIL 反汇编程序),而且印象里 vs 还另外带了个代码混淆器的说(可读性太好了么?)
页: 1 [2] 3 4
查看完整版本: [网页游戏] web红魔乡 3~6 面 [完]