用c# 开发html5的尝试,试用bridge.net
Javascript交叉编译方案很多了,工业级品质的也不是没有,但前两年我从事html5 3d引擎开发时,做过一圈评估,没有可用的。
作为一个c#爱好者,我自然是很希望能最大限度的利用c#的生产力,之前经过评估,我们选择了typescript 作为开发工具,确实也产生了一些收效。
时过境迁,虽然很久不做h5方面的开发,但任然关注,偶然发现bridge.net的发展速度相当的不错,今日观之,社区已经相当成熟。就手痒,又评估了一把。
先上源码
https://github.com/lightszero/bridge.net.study
也直接有生成的页面
https://lightszero.github.io/bridge.net.study/webapp/webapp/index.html
先说结论
Bridge.net成熟度很高,我尝试了一些c#的语法,都可以正常工作。
也发现了一些小小的问题,懂一些js一对比很容易解决。
会带入一个bridge.js 1M多,压缩版800k
Bridge采取的方案是直接将c#代码编译为js,准确的说是IL代码。而且采用的方法比较暴力,对无法直接对应的一些c#常用功能,直接写了一套js底层类库来支撑。
这就是那1M的来历,好处是编译过程就会相对比较简单,越简单的机制越容易稳定。
对比typescript方案主要有3个优点
1. 有整数,在语法表达方面会更清晰
2. 有struct,这个我就不多言战术价值了
3. C#,这就仁者见仁了
主要有两个缺点
1. 多了1M的依赖库
2. 生成的代码多了一层包装,没有typescript生成的代码干净。
老有人拿untiy的webgl方案说事,我只说一条。
Unity的webgl方案是构筑在webassembly基础上的,微信小游戏不支持。
现在来说说bridge.net 怎么用
0. 首先你得是个Visual studio 用户,不是当我没说
1. 根本不用安装,因为他的原理就是一个c#dll 和 编译相关的dll,只需要dll和csproj的相关配置,这个工作nuget就可以完成。
你随便建立一个c#项目,然后nuget 安装 bridge.net 就行了
我是用一个asp.net项目做模板,然后nuget安装bridge.net,因为asp.net 项目 按F5 就可以直接启动页面呀,就这么简单。
2. 然后只要build项目的时候bridge.net就会自动给你生成js了,他会使用bridge.js来做一些配置选项
3. 关于功能
前面安装的briage.net 只是安装环境,首先要使用html5自己的接口,就是访问 window 呀这些,需要再nuget安装 bridge.html5.
我要开发个webgl接口来试试,就nuget安装bridge.webgl
4. 关于调试
浏览器调试,略。
因为html 有map文件标准,所以你浏览器调试也是可以看到c#的,而且可以下断电,观测值
你要确认的事情就是bridge.json打开了map的输出
不过bridge.net有一点不好,他提供的功能,对命名做了修改
就比如这个GetContext,在js里是getContext
因为这个修改,对调试造成了一些小小的麻烦,浏览器调试工具是针对js的,还要用原来的名字才能找到。因为浏览器的map文件只有js和源文件行数的映射,没有变量名函数名这些。
但问题不大,我们知道它主要就改了大小写而已,调试的时候多敲一下的问题
那么可不可以直接在vs里面下断点调试呢,也是可以的。因为bridge输出的map文件用的相对路径,只要把bridge.json的输出路径改一下,就行
然后打开vs的脚本调试功能
注意vs2017才有google chrome的调试功能(印象中),vs2015只能调试ie去
然后就可以直接在vs里面断点了,需注意因为他做了一个改名的动作,调试的时候对监视器产生了影响
用c# 开发html5的尝试,试用bridge.net的更多相关文章
- JS开发HTML5游戏《神奇的六边形》(三)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- JAVASCRIPT开发HTML5游戏--斗地主(网络对战PART4)
继之前用游戏引擎(青瓷引擎)做了斗地主单机版游戏之后,这里分享下使用socket.io来实现网络对战,代码可已放到github上,在此谈谈自己整个的开发思路吧. 客户端代码 服务端代码 (点击图片进入 ...
- javascript开发HTML5游戏--斗地主(单机模式part3)
最近学习使用了一款HTML5游戏引擎(青瓷引擎),并用它尝试做了一个斗地主的游戏,简单实现了单机对战和网络对战,代码可已放到github上,在此谈谈自己如何通过引擎来开发这款游戏的. 客户端代码 服务 ...
- javascript开发HTML5游戏--斗地主(单机模式part2)
最近学习使用了一款HTML5游戏引擎(青瓷引擎),并用它尝试做了一个斗地主的游戏,简单实现了单机对战和网络对战,代码可已放到github上,在此谈谈自己如何通过引擎来开发这款游戏的. 客户端代码 服务 ...
- JS开发HTML5游戏《神奇的六边形》(一)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- JS开发HTML5游戏《神奇的六边形》(二)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- JS开发HTML5游戏《神奇的六边形》(四)
近期出现一款魔性的消除类HTML5游戏<神奇的六边形>,今天我们一起来看看如何通过开源免费的青瓷引擎(www.zuoyouxi.com)来实现这款游戏. (点击图片可进入游戏体验) 因内容 ...
- 使用Visual Studio 2012 开发 Html5 应用
Visual Studio 一直以来是开发微软旗下应用的利器,只要是开发微软相关的应用无论是Windows程序,WPF,Asp.Net,WinRT Surface,WindowsPhone 等微软旗下 ...
- 使用 video.js 开发 HTML5 视频页面
时间 2015-05-13 17:11:58 The GIS Guy 原文 http://thegisguy.tk/html5-video-using-video-js/ 主题 Video.js H ...
随机推荐
- OpenLayers学习笔记(八)— 类似比例尺的距离环(二)
openlayers 3 地图上创建一个距离环,始终以地图中心为中心,每个环之间的距离类似比例尺,随地图缩放而变化. 添加具有覆盖整个范围的特征的虚拟层,其可以被设置为围绕地图中心的环. 这篇是上一篇 ...
- Luogu P2057 [SHOI2007]善意的投票
题目链接 \(Click\) \(Here\) 考虑模型转换.变成文理分科二选一带收益模型,就一波带走了. 如果没有见过这个模型的话,这里讲的很详细. #include <bits/stdc++ ...
- C语言运算符优先级总结
一 写在开头1.1 本文内容本文内容为C语言中运算符优先级的总结.转载于:https://blog.csdn.net/huangblog/article/details/8271791,感谢原作者的付 ...
- Navier-Stokes equations (Lectured by Luis Caffarelli)
百万美元问题: http://www.claymath.org/millennium-problems/navier%E2%80%93stokes-equation Official Problem ...
- split host
# encoding:utf-8 _portprog = None def split_host_port(host): """ split the host :para ...
- CemtOS7更改yum网易 阿里云的yum源。
一,鉴于用国外的Yum源,速度比较慢,所以想到将国外的yum源,改为国内的Yum源,著名的有网易 阿里云源.如何更改呢? 二,更改yum源为网易的. 首先备份/etc/yum.repos.d/Cent ...
- nnet3 TDNN chunk, left-context, right-context
chunk-width 数据块的宽度 NnetIo name=="input" indexes,left-context+num-frame+right-context=5+7+6 ...
- tcp协议的简单理解
tpc协议属于传输层协议,本篇主要介绍下几个概念,以及握手和挥手的过程. 1.tcp的几个概念 位码:即tcp标志位,有6种提示 SYN:synchronus,表示建立联机. ACK:acknowle ...
- UDP 单播、广播、多播
一.UDP广播 广播UDP与单播UDP的区别就是IP地址不同,广播使用广播地址255.255.255.255,将消息发送到在同一广播网络上的每个主机.值得强调的是:本地广播信息是不会被路由器转发.当然 ...
- pythonのdjango连接MYSQL
在py3.*中利用django使用mysql时,会出现一些问题.由于django默认的是 MySQLdb,但MySQLdb目前不支持py3.*所以我们要改用pymysql,首先要安装pymysql,命 ...