设为首页收藏本站喵玉殿官方微博

 找回密码
 少女注册中
搜索
楼主: ofz

[网页游戏] web红魔乡 3~6 面 [完]

  [复制链接]
 楼主| 发表于 2014-7-12 14:16:20 | 显示全部楼层
drzzm32 发表于 2014-7-12 13:27
这样才是技术区嘛。。。
话说你们都是控制在30fps?我是60。。。
干脆今天更新一发,看看5000+的弹幕怎 ...

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

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

使用道具 举报

发表于 2014-7-12 14:23:27 | 显示全部楼层
本帖最后由 lrdcq 于 2014-7-12 14:34 编辑
ofz 发表于 2014-7-12 14:12
换成台式机的 Chrome 跑了一下,分数涨到2204了

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

点评

ofz
看这个页面中间的 Bunnymark,Chrome 下有 26x http://blog.createjs.com/webgl-support-easeljs/  发表于 2014-7-12 14:39
回复

使用道具 举报

发表于 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君的运算代码也涉及到图像显示的运算
回复

使用道具 举报

发表于 2014-7-12 15:29:59 | 显示全部楼层
lrdcq 发表于 2014-7-12 14:23
其实现在chrome和firefox的canvas都是自动硬件加速了的,那个10多倍应该是canvas支持硬件加速前的事儿了, ...

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

使用道具 举报

发表于 2014-7-12 15:37:44 | 显示全部楼层
本帖最后由 drzzm32 于 2014-7-12 15:45 编辑

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

5000弹幕弹型1:
屏幕截图(12).jpg
5000弹幕弹型2:
屏幕截图(13).jpg
10000弹幕弹型2:
屏幕截图(14).jpg
然后资源占用:
屏幕截图(15).jpg

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


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


我的判定算法:
估计多亏这个预判定:
  1. Shared Function BulletPreJudge(PlayerX As Single, PlayerY As Single, BulletX As Single, BulletY As Single, SetDistance As Single) As Boolean
  2.             If Math.Abs(PlayerX - BulletX) < SetDistance And Math.Abs(PlayerY - BulletY) < SetDistance Then
  3.                 Return True
  4.             Else
  5.                 Return False
  6.             End If
  7.         End Function
复制代码
判定:
  1. Shared Function BulletJudge(PlayerX As Single, PlayerY As Single, BulletX As Single, BulletY As Single, SetMinDistance As Single, _
  2.                                     SetMaxDistance As Single) As Integer
  3.             If WDJ_E.Base.MathGroup.Distance2D(PlayerX, PlayerY, BulletX, BulletY) > SetMaxDistance Then
  4.                 Return JUDGE_AWAY
  5.                 Exit Function
  6.             ElseIf WDJ_E.Base.MathGroup.Distance2D(PlayerX, PlayerY, BulletX, BulletY) > SetMinDistance Then
  7.                 Return JUDGE_GRAZE
  8.             Else
  9.                 Return JUDGE_MISS
  10.             End If
  11.         End Function
复制代码

@lrdcq 你发个截图看看?            这个VB也是解释执行啊,不是什么C#,C++的

点评

话说确实VB.net的性能应该比JS好些,毕竟javascript是纯解释性语言  发表于 2014-7-12 15:43
你没看见我那个chrome的内存占用那才叫恐怖....  发表于 2014-7-12 15:40
回复

使用道具 举报

发表于 2014-7-12 15:50:32 | 显示全部楼层
本帖最后由 lrdcq 于 2014-7-12 15:55 编辑
drzzm32drzzm32 发表于 2014-7-12 15:37
然后我试了下自己的游戏(VB .NET & OpenGL)右上是Fps。

5000弹幕弹型1:

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





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

使用道具 举报

发表于 2014-7-12 16:02:30 | 显示全部楼层
本帖最后由 drzzm32 于 2014-7-12 16:05 编辑
lrdcq 发表于 2014-7-12 15:50
咦,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)宫就可以看了
回复

使用道具 举报

发表于 2014-7-12 16:16:40 | 显示全部楼层
本帖最后由 lrdcq 于 2014-7-12 16:27 编辑
drzzm32 发表于 2014-7-12 16:02
本来就是解释性的~
微软为了.NET的兼容性,并没有把程序翻译为二进制代码,依然由框架进行解释执行。
话 ...

好吧,查到VB.net是中间解释性语言....那不就和java差不多一个意思了么NICE,这样查看代码确实就方便多了.....虽然我拿VB源码也没用。嘛,一般的理解解释性语言=代码随便看...我刚才深入了解了一下VB.NET...确实是这样液话说代码里面还有RPG,AVG之类的坑,真是庞大啊
QQ截图20140712162215.jpg


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

点评

@lrdcq 今天技术区爆炸了(笑。10+回复量  发表于 2014-7-12 17:23
@drzzm32 嘛反编译(根本没有编译的话就不叫反编译).NET的软件一搜一大片...随便下的一个,另外观察了一下exe中的指令大概是吧源码混淆为MSIL的指令作为数据段储存的...和JAVA快彼此彼此了(虽然java是jar)  发表于 2014-7-12 16:41
因为程序运行时在缓存中是二进制代码,exe中不是。 话说你这是啥App?NETDasm?  发表于 2014-7-12 16:35
回复

使用道具 举报

 楼主| 发表于 2014-7-12 18:03:30 | 显示全部楼层
本帖最后由 ofz 于 2014-7-12 18:56 编辑
lrdcq 发表于 2014-7-12 15:19
我做了一组测试得到了一堆很奇怪的结果

我本机对ofz君的bench1和bench5做了无渲染(GAME.draw置空 ...

睡了一觉醒过来,发现你们又折腾出不少东西呢

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

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

点评

ofz
特地去换了个头像跑一遍,发现果然有区别!  发表于 2014-7-12 18:25
奇怪了,为毛我这儿涨得这么少呢?一定和脸有关!  发表于 2014-7-12 18:09
回复

使用道具 举报

 楼主| 发表于 2014-7-12 18:12:17 | 显示全部楼层
drzzm32 发表于 2014-7-12 16:02
本来就是解释性的~
微软为了.NET的兼容性,并没有把程序翻译为二进制代码,依然由框架进行解释执行。
话 ...

楼下 lrdcp 说的对,vb .net 不是解释性的。.net 平台上的三种语言(vb.net, c#, 托管c++),最后都是编译成统一的,跨平台的 msil 代码的(确实跟 java 很像呢)。vs 带了这种 msil 代码的查看器 (ildasm.exe,中文似乎叫 MSIL 反汇编程序),而且印象里 vs 还另外带了个代码混淆器的说(可读性太好了么?)  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 少女注册中

本版积分规则

合作与事务联系|无图版|手机版|小黑屋|喵玉殿

GMT+8, 2025-10-31 16:08

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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