当前位置: 永利棋牌 > 儿童文学 > 正文

webGL游戏开发,使用JavaScript开发跨平台的桌面应

时间:2019-10-05 10:07来源:儿童文学
本人很懒,文章排版有问题,请勿吐槽。 本来开始用简书的时候规定自己一周至少写两篇文章,然而现在距离上一篇的时间已经过去了快一个月了,现在开始慢慢补吧。最近花了大约三

本人很懒,文章排版有问题,请勿吐槽。

本来开始用简书的时候规定自己一周至少写两篇文章,然而现在距离上一篇的时间已经过去了快一个月了,现在开始慢慢补吧。最近花了大约三个星期,从前端、后端、数据库到部署完成了一个简单的问答网站,目前部署在搬瓦工,还有不少bug没有改,细节也有很多不合适,以后在慢慢改吧。
先放张图

任何可以使用JavaScript来编写的应用,最终会由JavaScript编写。--Atwood定律

正文:

图片 1

Atwood's Law是Jeff Atwood在2007年提出的:“any application that can be written in JavaScript, will eventually be written in JavaScript.”。据说,这只是当时开的一个玩笑。不过,这个玩笑似乎渐渐变成了现实。从各种华丽的网页框架,到功能强大的库,到了现在的机器学习,服务器开发,都有JavaScript的身影。从JavaScript也衍生出了一些语言,例如TypeScript。而使用JavaScript制作游戏也变得方便起来,可以使用CocosCreator。Html5的横空出世,也将之前JavaScript在网页的辅助地位提升到了主力地位,nodejs的出现更是让其实现了所谓的“全栈”开发,现在JavaScript甚至可以做手机应用。但是,在移动端、浏览器、服务器端有需求,在桌面应用上也会有需求。能不能使用JavaScript来开发可以跨平台的应用程序呢?答案是:可以。使用Electron即可方便的使用JavaScript进行桌面应用开发。可以看到,很多大名鼎鼎的程序都是由它直接或间接开发而成,例如Atom,VSCode等。

webGL这个js API,可以呈现交互式的2D或3D图形。

主要用到了semantic ui的css框架、vue.js、django、mysql,通过uwsgi部署在centos6,nginx反向代理。
基本上已经做到了前后端分离,后端提供api接口,把大部分逻辑交给js去做。这里用了Django REST framework来实现api,用reqwest库向api发送get、post请求实现增删改查。
尝试采用了token认证,用js-cookie建立和移除cookies实现认证,基本的权限控制已经实现。
目前主要分为主页、答案详情页、问题详情页、话题页、问题页、登录&注册页、个人资料&资料修改页。
暂时还未实现的功能有:
1、用户之间互相回复
2、搜索
3、选中指定话题时该话题样式变化
4、关注用户
5、富文本
关于首页显示的内容,知乎有自己的算法,我只是按id一股脑显示的,暂时对这方面还没什么头绪。说是仿知乎,其实没法比,就拿来练练手而已。
部署花了很多时间,前后得有一个多星期,主要是没什么头绪,不知道vps、uwsgi、nginx和域名这些之间的联系,看了很多教程也不不明白,多亏了一个小伙伴给我打了电话讲解了,现在感觉很简单了。
vps就是一电脑,django项目运行在vps上。
WSGI是为为Python语言定义的Web服务器和Web应用程序之间的一种通用的接口,uWSGI就是web服务器,用于接受前端发送的请求并处理后发送给web应用程序,uwsgi是uWSGI服务器实现的独有的协议,只用uwsgi也能实现部署。
nginx是一个反向代理服务器,使用nginx后,uwsgi只需要将django项目运行在本地,请求和响应通过nginx进行。nginx可以将静态文件单独处理,速度要比uwsgi快。
域名需要解析到服务器的ip地址上,访问域名时会将域名解析成对应的ip。

需要注意的是,目前使用Electron开发桌面应用程序有一些限制条件。首先,我们无法调用复杂的系统API(或者说不能直接做到),这就导致我们无法开发更加复杂的企业级应用。其次,它的性能目前仍然不能与原生应用相提并论。我们可以认为,Electron就是一个套着浏览器外壳的包装盒,这个包装盒给我们读写文件的能力,我们开发好web应用程序,调试完成后使用它来进行封装,给我们的web应用程序加一个浏览器内核。这样,我们的js代码就可以脱离传统浏览器模式,独立运行了。然而它和传统的浏览器模式道理是一样的,所以有极高性能需求时,还是需要使用C++、Java等开发。但大多数的应用程序根本不需要那么高的性能要求,所以使用Electron开发是没有问题的。接下来,我们尝试着从零开始,一步一步的使用Electron来开发Windows桌面应用,当然Mac和Linux也适用此方法。

表现效果一流,支持的浏览器丰富。

关于部署,还要单独写一个总结,把流程写一边,毕竟坑了我很长时间。网站还要继续优化调整细节,数据库的访问也要继续优化。

首先,我们进入Electron的官网:。进入后,发现全英文,不要紧,实际上大多数都可以不看。我们直接来到首页的这里:

目前支持 WebGL 的浏览器有:Firefox4+,Google Chrome9+,Opera12+,Safari5.1+ 和Internet Explorer11+;然而, WebGL一些特性也需要用户的硬件设备支持。

最后放github。

图片 2

如此犀利的技术,加上刚入游戏行业这个坑,再加上公司用U3D做的东西慢如狗。因此我自己经过一番调查,总结出一个游戏开发思路,望各位指正:

--------------2017年2月6日----------------
过完年更新了一点。
1、添加搜索功能
2、添加评论分页
3、添加用户互相回复

如图所示,官方给出的安装方法是使用git和npm,但我们可以不使用git。然而,npm是必要的。npm是nodejs的包管理工具,新版本的nodejs已经集成了npm,安装nodejs后直接附带npm。然而,一些旧版本的nodejs,或者从一些非官方处下载的不可靠的nodejs,可能不带npm,所以我们在使用它之前必须先安装nodejs和npm。网上有很多教程,这里不再演示。需要注意的是,第三个命令npm install && npm start中,我们可以只输入npm install,因为后面附带的指令很可能导致控制台“死机”的情况,一直卡住且无法成功安装Electron。所以,我们只要进入我们指定的目录,然后执行以下命令即可(这些命令各个系统通用):

1:后端采用熟悉的技术,本人擅长java(大约做了7-8年),servlet3.0后支持websocket,加上web端的良好支持,各种页游层出不穷,因此选择java左右后台开发的主流技术没有任何问题。基本框架是:

现在才发现vue.js自己只用了一点皮毛, 组件部分还没用到,本来想把网站组件化+webpack打包,结果比想象中的难的多,琢磨了几天放弃了,修改还不如重新写一个。这个也就这样了,自己的知识还是太少,用到的东西太单一。
下一阶段任务是vue+webpack做一个博客练练手。

图片 3

spring-websocket
spring-message
jdk1.8

图片 4

核心就是这两个支持websocket的spring官方模块,对于websocket的支持非常好,从效率上讲,易上手,花了一天时间做了个websocket的demo。并且实现了发布/订阅的机制。从交互协议上讲,个人感觉不存在多大问题。其中开启了stomp协议之后,不仅实现了订阅消息的机制,而且配合websocket的双工能力,从协议上将已经不会是技术瓶颈。

如此一来,我们就安装好了Electron。文件夹中:

spring官方出品的sock.js向下降级兼容各大浏览器,数据支持byteArray,json等轻量级数据,因为本身要实现的是棋牌产品,从交互数据的大小上讲算很小的了。退一万步讲,如果真的存在数据包过大,换成protobuf后也能缩小1/3到1/5。这块,不成问题。

图片 5

数据库方面,根据项目需要,暂定为mysql做数据持久化,项目的特点是持久化的频率不高,结合redis在内存中做业务数据的存储和数据传递,结算后做数据持久化。理论上还是能满足基本需要。

打开来看,文件的目录结构是这样的:

用户认证:

图片 6

说到用户认证,其实有很多种做法,首先从游戏场景讲:玩家进入游戏肯定是经过认证的用户。不支持陌生用户玩这个游戏,通常会走注册->登录流程。如果采用社交化登录的话。通过扫码登录(微信或者qq等)然后实现用户认证是比较常见的。登录后,后端给前端一个会话token,后面的数据交互,都会带上这个token(包括websocket协议中的数据交互)。redis根据token去做用户信息的key,value就是用户信息,从socketsession中获取到的id,作为第二个用户信息的key,value就是token。这样当用户掉线,重新登录时,可以更新用户的服务器状态。

目录看似复杂,其实,我们甚至可以不管这些文件!main.js可以相当于我们的配置文件,里面有一些配置信息,默认情况下,我们的应用程序会直接打开这个目录下的index.html。我们可以通过修改main.js中的参数来更改入口文件。当然,package.json也有用,之后都会讲到。

编辑:儿童文学 本文来源:webGL游戏开发,使用JavaScript开发跨平台的桌面应

关键词:

  • 上一篇:没有了
  • 下一篇:没有了