白鹭引擎开发扫雷游戏 - 微信小游戏服务端（云开发）问题集
云函数云函数怎么添加，代码到底在哪写？？添加点开发者工具的云开发按钮打开云开发界面。再点云函数-新建云函数即可新建。除了名字其他默认即可。编写在开发者工具项目目录下，自己新建一个文件夹比如cloudfunction，然后在project.config.json中添加一条设置："cloudfunctionRoot": "cloudfunction",你会发现这个目录图标上添加了一个云符号，表示被识别为云函数目录了。此时目录还是空的，在目录上点右键-同步云函数列表，会将你刚才新建的云函数同步到这个文件夹下，每个函数一个目录。顺序反过来也可以，先创建云目录再新建云函数都可以。本地调试报错？提示没有wx-server-sdkwx-server-sdk模块是必须的。引用wx-server-sdk这个模块既然是用微信的服务器，那么肯定会用到这个模块来获取用户信息什么的。这个模块也好，第三方模块也好都是运行在Nodejs下的，所以你需要本地先安装一个Nodejs。然后命令行进入云函数目录cloudfunction/myFunc，然后执行这个命令:npm install --save wx-server-sdk@latest完成以后就可以进行本地调试了。编写好的云函数如何上传部署？在云函数目录上点右键，有两个上传选项。上传并部署：所有文件速度较慢。将你本地的云函数文件还有所有用到的nodejs模块文件全部一起打包上传。比较耗时。上传并部署：云端安装依赖速度很快。云函数目录下的node模块不会被上传。云端会根据云函数目录下的package.json文件的内容在云端进行安装相关依赖。所以使用这个选项的时候一定要保证云函数目录里有package.json文件（有时候只有lock.json是不行的，需要手动创建）。如果你没有用到第三方模块的话，这个文件写成这样就够了（"wx-server-sdk"模块是必须的）：{ "dependencies": { "wx-server-sdk": "latest" } }本地的Nodejs环境搞不定怎么办不需要本地调试的话，本地的Nodejs环境就不是必须的。如上一条所述，使用上传并部署：云端安装依赖即可。每次上传所有文件很慢，好烦参见前面说的上传并部署：云端安装依赖。为什么进行数据库操作后，success没有被回调？这里是个大坑。官方API文档说是支持的，其实，success fail complete 的回调只能在小游戏客户端使用，而云函数端只支持Promise方式回调。这里是官方的回复系列文章白鹭引擎开发扫雷游戏 - 避开微信胶囊菜单，在白鹭引擎中调用微信小游戏API白鹭引擎开发扫雷游戏 - 打包Apple iOS（AppleStore）原生问题集白鹭引擎开发扫雷游戏 - 打包安卓原生问题集白鹭引擎开发扫雷游戏 - 微信小游戏客户端问题集白鹭引擎开发扫雷游戏 - 微信小游戏服务端（云开发）问题集【当前文章】
白鹭引擎开发扫雷游戏 - 微信小游戏客户端问题集
微信小游戏真机文本字体模糊现象在模拟器和原生HTML5发布时都没有问题，在微信小游戏真机某些机型上TextField文字变得很模糊。原因不明，猜测是不同机型的屏幕像素比不同造成的拉伸导致的。解决将TextField的字号变大一倍，比如原来设置的是15，那么改成30。然后再设置scaleX和scaleY设置为0.5。也就是实际使用更大字号的字体，但是缩小显示。简单暴力但好用。微信小游戏真机打开黑屏现象上传时有提示default.res.json文件没有被打包上传。并且真机打开游戏黑屏。直接原因微信认为这个文件没有被使用到，是无用的文件。而这个文件是资源管理用的，如果没有所有资源都不会被正常加载，自然就黑屏了。根本原因wingProperties.json文件缺少default.res.json的配置。这个配置本来是白鹭引擎自动默认的配置，不知道什么时候消失了。解决手动加上就好了。有时候也会在IDE中弹出提示，问你是否加入这个配置，选是即可。配置完应该是这个样子：{ "resourcePlugin": { "configs": [ (略) { "configPath": "resource/default.res.json", "relativePath": "resource/" } (略) ] }, (略) }配置完以后点白鹭IDE的debug按钮重新发布到微信开发者工具中即可。再次上传微信，default.res.json文件没有被打包上传的提示消失，也不再黑屏。系列文章白鹭引擎开发扫雷游戏 - 避开微信胶囊菜单，在白鹭引擎中调用微信小游戏API白鹭引擎开发扫雷游戏 - 打包Apple iOS（AppleStore）原生问题集白鹭引擎开发扫雷游戏 - 打包安卓原生问题集白鹭引擎开发扫雷游戏 - 微信小游戏客户端问题集【当前文章】白鹭引擎开发扫雷游戏 - 微信小游戏服务端（云开发）问题集
开源代码分析学习 - 有趣的聊天机器人 - 02 - 对话内容的定义
对话内容的定义源码文件不多几个文件夹挨个翻一下就找到了在assets/dialog.json 里面定义了全部的对话内容。比如： { "id": "0000", "details": [ ["很高兴遇见你"] ], "responses": [{ "content": "我也是！", "nextXianzhe": ["0003"] }, { "content": "我很怀疑这点……", "nextXianzhe": ["0001"] }, { "content": "真的吗？", "nextXianzhe": ["0002"] }], "nextUser": ["1000"] }, { "id": "0001", "details": [ ["……", "好吧"] ], "nextXianzhe": ["0003"] }, { "id": "0002", "details": [ ["我随便说说的，别在意"] ], "nextXianzhe": ["0003"] }分析一下数据结构根节点下面分两个子节点fromXianzhe （由机器人先发话的消息组）这个节点下面是一组消息包数据。以id字段区分。id：消息组编号details：机器人说话的内容（显示完等待访客从response里面挑选一个回复）response：（此属性省略的话表示暂停对话，等待访客选择一个话题先发话）可选回复内容1：回复内容、接下来跳转到哪个消息id可选回复内容2... 同上fromUser（由访客发话的话题组）id：话题编号brief：话题名details：一个消息内容的数组。每次从里面随机挑选一条显示。nextXianzhe：访客发言完了以后跳转到哪个消息id（也就是机器人回复的内容）没了。数据结构就这么简单。知道这些你就可以自己仿照现成的数据修改成自己想要的对话内容了。试着修改一下。 { "id": "0000", "details": [ ["很高兴遇见你"] ], "responses": [{ "content": "我也是！", "nextXianzhe": ["0003"] }, { "content": "我高兴不起来。。。", "nextXianzhe": ["0001"] }, { "content": "真的吗？", "nextXianzhe": ["0002"] }], "nextUser": ["1000"] }, { "id": "0001", "details": [ ["为啥", "谁踩你尾巴了？"] ], "nextXianzhe": ["0003"] }效果残课题手动改是没有问题，但要很细心，要很小心处理id的跳转。一不小心就跳错了。我想原作者应该是用了某种工具或者机制来自动生成这些对话的内容和回复规则吧。本节就先到这里了。系列文章开源代码分析学习 - 有趣的聊天机器人 - 01 - 这么好玩？开源代码分析学习 - 有趣的聊天机器人 - 02 - 对话内容的定义【当前文章】开源代码分析学习 - 有趣的聊天机器人 - 03 - 访客输入区域弹出/收起的动态效果
现象最近在学习前端技术，在Github上找了一些例子放到自己的网站上，发现有些代码不能正常运行。查看Chrome的错误提示发现很多json文件的访问被拒绝了，发生404错误。可文件明明是存在的。原因由于安全性考虑，很多空间商提供的web服务默认只开放了最常用的一些文件类型的访问权限，比如jpg，html，php等。如果需要访问默认以外的文件类型需要自己在空间后台追加Meta类型。解决一般方案，空间后台管理添加指定mime类型以我的空间（IIS）为例，后台管理里可以设置MIME类型。追加json文件的类型即可。一般来说这样就可以解决这个问题了。如果跟我一样运气不好，加了mime还是不能访问，有条件的可以尝试重启一下IIS服务。由于我使用的不是VPS只是一般的虚拟主机，所以想重启IIS没那么简单，尝试联系客服未果，于是想到了另一个方案。曲线救国，用服务端脚本语言转发json文本内容我的空间是php的空间，所以我就在要访问的那个json文件的同级目录写了一个php脚本，内容如下。<?php // 声明一下mime类型 header("Content-Type: application/json"); // 导入目标json文件 require_once "dialog.json"; ?>然后修改原来调用dialog.json的地方，改成这个脚本即可。比如我是这样改的：修改前$.getJSON("./assets/dialog.json"）修改后$.getJSON("./assets/dialogWrapper.php"）完美解决！当然如果你有多个不同的文件，可以写一个参数传递文件名进去。这里就不多说了。