在制作一个做 web 上 galgame 的脚本(?),想请教大佬们几个问题。

2017-01-24 17:47:20 +08:00
 hd7771

我的问题:

  1. 我想弄一个网站,用户上传脚本,然后我翻译之后返回给他一个 js 的链接,然后他自己引用。问题就是我的代码用到了一个叫做 jquery 的基础库和一个叫做 pixi 的图形库可能之后还会有声音库,那么有没有办法让帮用户使用这些依赖呢或者还是告诉用户让用户自己去搞?
  2. 用户成功用了我这个东西之后,游戏资源是到我服务器获取好还是让他自己去获取好?那么 js 资源的获取该怎么写?
  3. 虽然本地跑的不慢,但是网络上可能出很多问题,可不可以做到先把游戏隐藏跑一段时间再返回去让用户玩呢?
  4. 如果用户提交上来的脚本一点问题都没有,那么一定没什么问题。如果提交上来的有问题,我能想到的情况有限,错误提示有没有方便的办法去做呢?

我是 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

然后对应的界面





4378 次点击
所在节点    JavaScript
36 条回复
hd7771
2017-01-24 23:52:11 +08:00
@aaronrzh 那就是我要的效果,在给用户做个上次资源的界面应该就可以了,感谢大佬,一楼那位大哥估计也是这个意思,就是我太菜没看懂。
vincentjie
2017-01-25 00:03:33 +08:00
@hd7771 #17 如果你能把握你的需求就局限于这个 if 的话,确实自己实现个能满足需求的脚本也挺不错的,起码效率上应该会比绝大多数的脚本语言高。但是我觉得大概率,后面你会有更多的需求。
hd7771
2017-01-25 00:21:13 +08:00
@vincentjie 我现在的需求都是特效方面的, cpp 文件已经不用改了,改改 js 就行了。而且 avg 这种东西没看到在流程上有什么新花样,都是玩特效,撑死加个还是 if 的好感度。我反正没这个能力在 avg 游戏上做出创新。我本来就是做个 0 门槛脚本给别人用,不可能就像上面那个哥们说的直接跟客户讲 lua 好用你去学 lua ,然后除了 lua 有学了一堆东西。至于效率,翻译和运行都是 O(n)的。但是你说的这些和我问的问题关系不大。。
v2dead
2017-01-25 09:09:43 +08:00
说起来你们还喷楼主不会拟定需求,先完成楼主需求再说啊。不管这个写的合不合适。
1.的解决方法可能可以采用一些讨巧的手段,网络上有公共的 jquery 的 cdn ,可以直接引用这个链接。
2.肯定是让他自己获取比放到你服务器好,至于怎么获取,我不是前端我不知道,这个问题丢给用户去把: P
3.基本游戏都是这么做的,开始前一段 Loading 加载资源。你多增加一个 loading 场景就好了。
boy next♂door
zhanglintc
2017-01-25 12:33:00 +08:00
第一遍看代码我以为是乱码
hd7771
2017-01-25 12:44:47 +08:00
@zhanglintc 你肯定不是黄油玩家,这玩意是我找几个资深黄油玩家问出来的。
timwei
2017-01-25 14:31:33 +08:00
回问题

>>>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

不过弄着弄着发现这梦太美,会遇到各浏览器差异性带来的问题

处理起来会很坑

懒癌发作就放着了
murmur
2017-01-25 16:47:53 +08:00
@v2dead 那个 galgame 的引擎要多少有多少, vb 差不多的语法,认识一个人都开始出作品卖碟子了
这东西拼的技术?拼的剧情? NONONO !还不是谁的小姐姐好看
需求这东西,现在都 2017 年了,你能想到的别人早做完了
为什么要前端呢。。你前端要处理多大数据加载量啊,每张都是图还动不动要加音视频或者语音的
timwei
2017-01-25 17:25:06 +08:00
重复造的不是轮,是浪漫

大型资源,如长达十来分钟的背景音乐,才会需要特别在後端处理分割,前端延迟加载

背景图片丶人物立绘或人物语音,大小通常不大,随着游戏阶段加载资源就好了

DMM 上有蛮多 HTML AVG 页游的, LZ 可以去看看他们的一些处理方式
hd7771
2017-01-25 17:35:43 +08:00
@murmur 国内做相关引擎的我只服面包组,您那位朋友是哪位大组的啊,国内比较出名的制作组据我所限的知识也没见到哪个是自研引擎啊。而且 web 相关的都是 flash ,但就算有了和我什么关系。而且我为毛要在 web 前端搞事,就是为了学 web 前端。我是一个码农,我只能做好自己的事,而且我还没开始工作,放假没有其他事情做,闲着还不如撸这个。
前端圈子里明显热心,学到不少。像您进来就说些莫名其妙的话然后各种不行的前端我还是第一次见,毕竟不管有没有用,思考问题本身对于程序员就是有意义的,不是么?至少在大佬帮助下,这玩意就算其他人不能用,我方便自己和朋友做一个小东西插入到自己网页上也是可以的吧。
hd7771
2017-01-25 17:42:46 +08:00
@timwei 我本来就是抱着学习的心态来做这个的,那位大哥说你白搞了,数据库、编译器之类的基础设施都有那么多种。按他的想法就是,大一的学生到了学校,老师直接说,大家别学习了,和我去搞量子计算机吧,其他的东西都被别人搞烂了。
FrankHB
2017-01-25 17:52:02 +08:00
@murmur 撸个解释器要毛编译原理……有几个人喜欢作死倒腾上下文相关文法?
要是光论语法…… Lua 比起 SICP 上的玩具都是一坨呵呵。当然大多数比 Lua 更作死的就不用提了。
murmur
2017-01-25 21:24:03 +08:00
@hd7771 都是搞过前端的,才不忍心你上来就被坑,造轮子之前先学会用轮子,以前也是懵懂的时候写过组件,后来发现就一坨屎,原因很大一部分就是不懂需求,结果做做改改搞出一坨无法维护的代码

@timwei 按照前端优化理论声音和图片都要压缩的,但是对于 galgame 这不行啊,你把图片和音频全压了撸点就没了。。

什么需求用什么技术,前端不是万能的,我希望你懂这点,前端现在太浮躁了,啥都想用 js 开发
murmur
2017-01-25 21:50:31 +08:00
既然你想要建议,那我就直说,你这个文法的可读性就是 0 ,为什么把 click 也放进去呢?看上去跟按键精灵一样
标准化是什么意思,选择了前端就优先考虑 json ,或者长得像 json 的,或者跟 html 、 css 这些搭边的
我把你的语法改了一下 不仅流程清晰了很多 还可以轻松加扩展
lhc70000
2017-01-26 03:45:28 +08:00
不太建议造轮子啊...

有 novelsphere ( http://js.novelsphere.jp )又有面包工坊在做的 AVG.js... 都直接兼容 KAG 脚本了,感觉几乎没什么可以改进的;要说脚本语言的简洁度, ren'py ( https://www.renpy.org )的语法也够了,很难再简洁。

如果想吸引人来用的话感觉一个是稳定性一个是自己的游戏平台,这些比语法重要得多。


正经答问题:

1. 按你的设定应该是用户来搞了,但是只返回 js 没看出有什么好处,还不如给用户一个网页;
2~3. AJAX 后台加载;
4. 没啥好方法,说不定得(像大多数 gal 引擎一样)做一个编辑器...


说实话,语法的设定让我眼前一亮(有点结构化的感觉很棒),但是有几点建议...

- click 之类的最好不要单独写成命令,实际游戏里几乎每句之后都要点击,都写出来就太多了
- 对话的名字部分也可以先用类似变量的东西存着,毕竟每句都要把主角姓名打一遍很是麻烦

总之就是减少重复性的内容啦。你可以先参考一下各大引擎的脚本语法,提炼出不足,然后集中改正。


以上只是我自己的建议,请不要太介意 ><
Technetiumer
2017-01-29 19:03:30 +08:00
我瞎写的。。。。

资源
一堆图片、音频,可被模板 / 页面复用。

模板
一个界面状态,比如“显示人物 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 即可玩。
或者做一个游戏平台,全部上传,产生一个唯一链接,全部托管到服务器。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/336716

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX