我的问题:
我是 web 新手, js 都是当 c 来写的。。所以有些问题可能大佬们看起来比较白痴,但是你们的一点点帮助可能对我提高很大,谢谢。
这是我定义的语法:
bg.島_坂道_差分(夕方)|jpg
middle.chrysoA_a|png
dialog."???"."ass we can"
option2."肛"|flag1."不肛"|flag2
click
op.flag1{
dialog."???"."boy next door"
click
middle.clear
bg.図書館2階_隠し書庫_白黒|jpg
dialog.""."deep dark fantasy"
click
des."菊花好痛"
}
op.flag2{
middle.chrysoB_g|png
dialog."???"."interesting"
}
click
然后对应的界面
1
arzusyume 2017-01-24 21:03:59 +08:00 1
> 然后我翻译之后返回给他一个 js 的链接
那直接返回一个 html 不是更好么 |
2
bombless 2017-01-24 21:34:47 +08:00 via Android 1
感觉可能做一个 js 库就可以了吧。也可以考虑打包成一个 exe 丢到 vps 上暴露一个端口来服务的方案。感觉主要取决于你希望运行环境有多灵活了。如果是对服务器环境没有假设的那种可能就是一个 css 库加上 js 库吧。
|
4
tSQghkfhTtQt9mtd 2017-01-24 21:37:01 +08:00
|
6
hd7771 OP @liwanglin12 额,我加入绘图库就是为了之后更新可以加入一些特效的,比如柚子社常用的上下动一下,些许之后还能插入一些小游戏的。。
|
7
tSQghkfhTtQt9mtd 2017-01-24 21:42:01 +08:00
@hd7771 自己再改改喽= =
|
8
hd7771 OP @liwanglin12 看了一下,,他写的那么少怎么处理分支嵌套的情况。。。
|
9
tSQghkfhTtQt9mtd 2017-01-24 21:45:37 +08:00 1
@hd7771 #8 朋友博客在用,具体实现我也没了解过
|
10
hd7771 OP @liwanglin12 我解释器是 c++写的,有没有什么办法达到相似的效果呢?
|
11
hd7771 OP @liwanglin12 我知道了,他这个东西,如果分支之后,,相同的东西全部要重新写,,他是处理 json 的数据,,我是按照传统的解析器写的,,,小游戏用他的很方便, json 相关的工具非常多。。但是游戏流程稍微长了,工作量就会大很多。。
|
12
hd7771 OP @bombless 我是用 c++写的,是把脚本翻译成 js 的。我就是想按你的说法给别人调用。但是最理想的效果就是你说的一个库的效果,但是对于不同的脚本,翻译出来的东西是不一样的。可不可以对于每个翻译出来的文件制作一个库呢?大概怎么实现呢?
|
13
aaronrzh 2017-01-24 23:07:36 +08:00 1
直接返回一个 url 吧,让用户用 iframe 嵌到自己的网页就可以了
|
14
hd7771 OP @aaronrzh iframe 的作用是不是一个 html 文件可以插入到另一个 html 文件?那么我就把游戏资源放在我自己的服务器上。 localhost 上看的是什么样,对面引用看的也是什么样?
|
15
murmur 2017-01-24 23:21:57 +08:00
自定义语法都是多余的,踩过坑的人都知道没有编译原理基础自定义语言是多(zhui)痛苦的
所以如果你不知道用什么语言,就用 lua 吧 |
16
hd7771 OP @murmur 但是这个东西只有 if 啊。。。而且实现脚本语言本来就不需要多少编译原理的知识,,弄个 ast 树搜索一下就出来了。
|
17
hd7771 OP @murmur 而且就算是编译性的语言,也有非常多的工具来帮助你实现,你要做的也就是词法分析语法分析这些编译器前端工作,和专门的编译工作不是一个概念。。
|
18
murmur 2017-01-24 23:26:07 +08:00 1
@hd7771 新手么,不知道怎么拟定需求,总以为什么都很简单,等后面逻辑复杂了就知道加功能多困难了
所以我的建议是不知道嵌入什么语言就用 lua ,不知道什么语法就照着 lua 做, lua 那么多游戏做嵌入式引擎不是没道理的 |
19
aaronrzh 2017-01-24 23:49:38 +08:00 1
@hd7771 iframe 的作用是引用一个网页, html 和资源放在你的服务器上,把 html 的地址给用户就可以了,用户在他们的页面上添加一个 iframe 把你的网页引用进去就可以了
|
20
hd7771 OP @murmur 真的不是觉得很简单,是我就没想做难,能够跑个分支就行了,而且一个 if 语句主流语言全都是这么实现的。而且我问这个问题是我已经做完可以用了,然后想让别人能够方便用并插入网页中,我自己不做游戏(不会画画)。 lua 的作用很多,我不知道对于我现在这个情况怎么在网上搜索相关的资料。
|
21
hd7771 OP @aaronrzh 那就是我要的效果,在给用户做个上次资源的界面应该就可以了,感谢大佬,一楼那位大哥估计也是这个意思,就是我太菜没看懂。
|
22
vincentjie 2017-01-25 00:03:33 +08:00 1
@hd7771 #17 如果你能把握你的需求就局限于这个 if 的话,确实自己实现个能满足需求的脚本也挺不错的,起码效率上应该会比绝大多数的脚本语言高。但是我觉得大概率,后面你会有更多的需求。
|
23
hd7771 OP @vincentjie 我现在的需求都是特效方面的, cpp 文件已经不用改了,改改 js 就行了。而且 avg 这种东西没看到在流程上有什么新花样,都是玩特效,撑死加个还是 if 的好感度。我反正没这个能力在 avg 游戏上做出创新。我本来就是做个 0 门槛脚本给别人用,不可能就像上面那个哥们说的直接跟客户讲 lua 好用你去学 lua ,然后除了 lua 有学了一堆东西。至于效率,翻译和运行都是 O(n)的。但是你说的这些和我问的问题关系不大。。
|
24
v2dead 2017-01-25 09:09:43 +08:00 1
说起来你们还喷楼主不会拟定需求,先完成楼主需求再说啊。不管这个写的合不合适。
1.的解决方法可能可以采用一些讨巧的手段,网络上有公共的 jquery 的 cdn ,可以直接引用这个链接。 2.肯定是让他自己获取比放到你服务器好,至于怎么获取,我不是前端我不知道,这个问题丢给用户去把: P 3.基本游戏都是这么做的,开始前一段 Loading 加载资源。你多增加一个 loading 场景就好了。 boy next♂door |
25
zhanglintc 2017-01-25 12:33:00 +08:00
第一遍看代码我以为是乱码
|
26
hd7771 OP @zhanglintc 你肯定不是黄油玩家,这玩意是我找几个资深黄油玩家问出来的。
|
27
timwei 2017-01-25 14:31:33 +08:00 1
回问题
>>>1. 我的想法是,先在前端检测用户嵌入的页面上,检测是否存在这些外部依赖,没有的话就操作 DOM 帮用户导入 例如检测 JQuery if (typeof jQuery == 'undefined') { var script = document.createElement('script'); script.type = "text/javascript"; script.src = "JQUERY CDN"; //replace jquery cdn url here document.getElementsByTagName('head')[0].appendChild(script); } >>>2. Game Assets 千万别让用户上传到游戏服务器,一是空间二是频宽三是安全性问题。 定义好 assets 存放的路径配置方式,在文件中解释即可 >>>3. 用状态去控制,当某阶段的资源完全读取完毕後,在进入该游戏阶段 效果应该能近似於 [进入一个新的游戏阶段] -> [画面提示 loading] -> [该游戏阶段开始] >>>4. 做个用户後台如何? 用户操作後台使用该服务,提交丶显示结果等等也都在该後台操作 <del>还可以插点广告赚赚资费</del> 题外话 我也有试着弄些 JS 将一些游戏引擎常用的开发习惯搬到网页上,想迅速产生 SPA 这是一个初始概念的 DEMO: https://timwei.github.io/rem-mywife/main.html#demo 不过弄着弄着发现这梦太美,会遇到各浏览器差异性带来的问题 处理起来会很坑 懒癌发作就放着了 |
28
murmur 2017-01-25 16:47:53 +08:00
@v2dead 那个 galgame 的引擎要多少有多少, vb 差不多的语法,认识一个人都开始出作品卖碟子了
这东西拼的技术?拼的剧情? NONONO !还不是谁的小姐姐好看 需求这东西,现在都 2017 年了,你能想到的别人早做完了 为什么要前端呢。。你前端要处理多大数据加载量啊,每张都是图还动不动要加音视频或者语音的 |
29
timwei 2017-01-25 17:25:06 +08:00
重复造的不是轮,是浪漫
大型资源,如长达十来分钟的背景音乐,才会需要特别在後端处理分割,前端延迟加载 背景图片丶人物立绘或人物语音,大小通常不大,随着游戏阶段加载资源就好了 DMM 上有蛮多 HTML AVG 页游的, LZ 可以去看看他们的一些处理方式 |
30
hd7771 OP @murmur 国内做相关引擎的我只服面包组,您那位朋友是哪位大组的啊,国内比较出名的制作组据我所限的知识也没见到哪个是自研引擎啊。而且 web 相关的都是 flash ,但就算有了和我什么关系。而且我为毛要在 web 前端搞事,就是为了学 web 前端。我是一个码农,我只能做好自己的事,而且我还没开始工作,放假没有其他事情做,闲着还不如撸这个。
前端圈子里明显热心,学到不少。像您进来就说些莫名其妙的话然后各种不行的前端我还是第一次见,毕竟不管有没有用,思考问题本身对于程序员就是有意义的,不是么?至少在大佬帮助下,这玩意就算其他人不能用,我方便自己和朋友做一个小东西插入到自己网页上也是可以的吧。 |
31
hd7771 OP @timwei 我本来就是抱着学习的心态来做这个的,那位大哥说你白搞了,数据库、编译器之类的基础设施都有那么多种。按他的想法就是,大一的学生到了学校,老师直接说,大家别学习了,和我去搞量子计算机吧,其他的东西都被别人搞烂了。
|
32
FrankHB 2017-01-25 17:52:02 +08:00 1
@murmur 撸个解释器要毛编译原理……有几个人喜欢作死倒腾上下文相关文法?
要是光论语法…… Lua 比起 SICP 上的玩具都是一坨呵呵。当然大多数比 Lua 更作死的就不用提了。 |
33
murmur 2017-01-25 21:24:03 +08:00
|
34
murmur 2017-01-25 21:50:31 +08:00 1
既然你想要建议,那我就直说,你这个文法的可读性就是 0 ,为什么把 click 也放进去呢?看上去跟按键精灵一样
标准化是什么意思,选择了前端就优先考虑 json ,或者长得像 json 的,或者跟 html 、 css 这些搭边的 我把你的语法改了一下 不仅流程清晰了很多 还可以轻松加扩展 |
35
lhc70000 2017-01-26 03:45:28 +08:00 1
不太建议造轮子啊...
有 novelsphere ( http://js.novelsphere.jp )又有面包工坊在做的 AVG.js... 都直接兼容 KAG 脚本了,感觉几乎没什么可以改进的;要说脚本语言的简洁度, ren'py ( https://www.renpy.org )的语法也够了,很难再简洁。 如果想吸引人来用的话感觉一个是稳定性一个是自己的游戏平台,这些比语法重要得多。 正经答问题: 1. 按你的设定应该是用户来搞了,但是只返回 js 没看出有什么好处,还不如给用户一个网页; 2~3. AJAX 后台加载; 4. 没啥好方法,说不定得(像大多数 gal 引擎一样)做一个编辑器... 说实话,语法的设定让我眼前一亮(有点结构化的感觉很棒),但是有几点建议... - click 之类的最好不要单独写成命令,实际游戏里几乎每句之后都要点击,都写出来就太多了 - 对话的名字部分也可以先用类似变量的东西存着,毕竟每句都要把主角姓名打一遍很是麻烦 总之就是减少重复性的内容啦。你可以先参考一下各大引擎的脚本语法,提炼出不足,然后集中改正。 以上只是我自己的建议,请不要太介意 >< |
36
Technetiumer 2017-01-29 19:03:30 +08:00 1
我瞎写的。。。。
资源 一堆图片、音频,可被模板 / 页面复用。 模板 一个界面状态,比如“显示人物 xxx 在旁边的对话框,有两个选项”,界面上的按钮、嵌套关系等等都用 XML 描述,可被复用。 页面 继承一个模板,然后添加详细内容,比如“对话框的内容,选项 1 是肛,选项 2 是不肛”,唯一 ID 就是文件名,被流程树调用。 流程树 主体逻辑,显示页面,接收页面的返回值,判断、处理等等,显示下一个页面。 比如 ptest_result = ShowPage("page_test") if(ptest_result = “ gang ”) { ShowPage("page_gang") } else{ ShowPage("page_bugang") } 直接写 JS 多好 用户写好后把模板、页面、流程树, zip 压缩上传,服务端编译,打包成 zip ,用户下载解压,放入没上传的资源文件夹,打开 index.html 即可玩。 或者做一个游戏平台,全部上传,产生一个唯一链接,全部托管到服务器。 |