Js引擎 farOs 介绍
nGame
- nGame 一款文字游戏服务端框架;用于快速构建:自由探索、武侠、修真、模拟,回合制,剧本杀、动态语言小说、等服务器
- 如果你有期望实现的功能请加Q群
ngame计划
- 完善框架功能
farOs
- farOs 作为 nGame框架的驱动,底层使用机器码运行,支持多线程、协程、可快速实现HTTP服务器、聊天服务器,restApi服务器
farOs计划
- socket、websocket客户端
- httpClient
- JS代码加密
- 将JS编译为本地机器码
- JS泛型支持
- JS面向对象特性支持
部署
-
将farOs.jar、jdk、 run.bat、ngame放在同一级目录下,然后执行run.bat即可.
正确的目录结构应该是 - ngame - jdk - farOs.jar - run.bat
-
在执行run.bat之前,需要设置两个地方
- 游戏的目录设置
- 在ngame下找到conf.js 将 appRootPath 对应的值改成游戏目录名字 如ngame
- 设置farOs启动需要的配置文件路径 修改run.bat中的参数
java -Dfile.encoding=utf-8 -XX:-UseParallelGC -Xmx512m -Xms512m -Xmn256m -jar farOs.jar game-script/conf.js
将最后的
game-script/conf.js
换成游戏目录中的conf.js地址 再启动run.bat
- 游戏的目录设置
连接服务器
-
farmud.exe 是临时的测试服务器的客户端工具,使用C#开发,功能简单,没有开源的必要。有能力的大佬可自行开发其他版本的websocket客户端。
-
由于目前更新非常频繁 ngame配套的运行环境<farOs、jdk、farmud.exe、run.bat、Redis-x64-3.2.100 win免安装版>
都在群内下载963081167
目录介绍
-
adm
- 核心文件存放目录
-
adm/daemons
- 需要常驻内存的程序
-
adm/master/master.js
- 重要文件,驱动会调用该文件中的一些函数
-
clone
- 模板类
-
clone/data
- 游戏素材属性配置目录,建议所有的游戏元素的属性配置存放于此
-
cmds
- 指令目录
-
d
- 地图相关存放
-
include
- 通用函数库
-
inherit
- 存放可以被继承的类
-
main
- 该目录只有一个main.js文件,为程序入口
-
demo
- 演示程序
-
conf.js
- 配置文件 准确说是驱动需要的配置文件
特性介绍和约定
超级属性、魔法属性、精灵属性
XXX` 大写的都为对象的魔法属性
__xxx__
小写的都为驱动为对象增加的超级属性
_exports_
精灵属性大佬们一定 要区别清楚这些属性,虽然感觉有点扯蛋。。。
web和rest api支持
-
目前暂时只支持静态页面 默认的网站目录 www 默认访问路径 http://127.0.0.1:8080
-
restapi 的访问路径 http://127.0.0.1:8080/api 不喜欢后面跟个api的可以用nginx做反向代理
-
关于对js的支持
ngame使用farOs驱动,farOs兼容了95%的js语法,除了farOs额外提供的体贴内置函数,大部分JS函数以及JS的特性都支持。
从应用框架的角度讲farOs等同于nodejs;不同的是,farOs更专注文字游戏领域。 -
文件
- 在ngame中一个文件等同于一个类模板,这个概念非常重要。所有的类模板的父类模板都存放在inherit目录下
-
关键字
-
me
- 和其他语言不同me在ngame 是
this
的作用,是对自己的调用,me 将作为保留关键字
- 和其他语言不同me在ngame 是
-
类模板的属性,注意 类模板的属性必须以下划线开头,子类模板才能继承
inherit/skill.js let _prop; function create() { }
- 继承
//继承哪些JS 在所有代码之前要完成继承 let inherits = ([ "inherit/data.js", "inherit/room.js" ]);
- 引入函数库
//载入那些函数库 let includes = ([ "include/common.js", ]);
-
核心函数库介绍
- include/common.js
- 通常情况下common.js 包括所有用到的内置函数库
-
os.debug(arg[,args...])
- 向控制台输出数据,arg可以是任何类型的数据
os.debug("你好世界","测试");
- 向控制台输出数据,arg可以是任何类型的数据
-
newObj(arg1[,arg2]);
- 将类模板实例化为游戏对象
- arg1 模板类文件地址
- arg2 对象属性配置文件地址
let obj = newObj("clone/user.js"); let obj = newObj("clone/user.js","clone/data/npc/xiaoyaozi.js"); //当newObj使用第二个参数,自动装载对象属性时 //被装载的文件一定要实现以下内容 let datas = { //存储属性 due:{ id:"xiaoyaozi", name:"逍遥子", }, //临时属性 temp:{ } }; let __exports__ = { datas:datas, }
- 将类模板实例化为游戏对象
-
D(arg[,type])
- 在一个类模板中调用其他类模板的方法或者属性
- 被调用的类模板如果没有加载到内存,驱动会自动加载一次
D("adm/daemons/x.js")->killAll();
- 默认情况下D函数根据类模板的文件名查找,如果需要根据类模板的实例的文件名查找,需要加上参数type,设置为1即可
D("adm/daemons/x.js#H6f751",1)->killAll();
- 在一个类模板中调用其他类模板的方法或者属性
-
thisObject
- thisObject 指向自己的指针,如果类模板继承了其他文件,在实例化对象之后,这些被继承的类模板中的
thisObject 关键字,都指向子类function a(){ } function b(){ thisObject.a(); //为了方便可以先赋值 let me = thisObject; me.a(); }
- thisObject 指向自己的指针,如果类模板继承了其他文件,在实例化对象之后,这些被继承的类模板中的
-
os.importx("x.js")
- 导入其他文件的开放属性或者函数,被导入的文件一定要实现__exports__
//x.js let datas = {}; let __exports__ = { datas:datas, } //其他文件接收 let {datas} = os.importx("x.js");
- 导入其他文件的开放属性或者函数,被导入的文件一定要实现__exports__
-
- 通常情况下common.js 包括所有用到的内置函数库
js代码加密
java新手自学群 626070845
java/springboot/hadoop/JVM 群 4915800
Hadoop/mongodb(搭建/开发/运维)Q群481975850
GOLang Q1群:6848027
GOLang Q2群:450509103
GOLang Q3群:436173132
GOLang Q4群:141984758
GOLang Q5群:215535604
C/C++/QT群 1414577
单片机嵌入式/电子电路入门群群 306312845
MUD/LIB/交流群 391486684
Electron/koa/Nodejs/express 214737701
大前端群vue/js/ts 165150391
操作系统研发群:15375777
汇编/辅助/破解新手群:755783453
大数据 elasticsearch 群 481975850
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。