作为一名游戏爱好者,假期里稍微研究了下Godot这个游戏引擎,想做一些小游戏。
之前在摸索python的时候曾经按照网上的教程接入了图灵开源聊天机器人,在itchat这个第三方库中实现了微信自动聊天的功能,关于这个怎么接入的具体步骤可以去百度,网上的教程都很全。
所以在制作自己的游戏demo的时候就想在游戏里实现这个功能。经过了一段时间的探索,终于获得了成功,下面就来分享一下整个过程。由于在编程方面还是新手,出现的错误还请原谅和指正。
具体聊天功能的实现分为三个步骤:
- 读取用户输入的字符串
- 将用户输入的字符串以特定的格式用request功能提交
- 将服务器端返回的数据以字符串的形式输出
首先是读取功能。
在Godot中的Node中有一个名叫LineEdit的控件,可以实现读取用户输入的字符串并返回。
通过这个连接这个信号可以实现当用户按下Enter键的时候完成录入。
func _on_LineEdit_text_entered(new_text):
txtLabel = get_node("LineEdit").get_text()
get_node("LineEdit").clear()
代码功能为当用户按下回车键时将字符串保存在txtLabel中,并清空当前输入栏。
接下来就是重点:如何接入机器人。
def get_response(msg):
url = 'http://www.tuling123.com/openapi/api'
data = {
'key' : '*****************',
'info' : msg,
'userid' : 'robot',
}
r = requests.post(url=url,data=data).json()
return r.get('text')
以上是python版本的接入函数,可见request post是json格式,接收也是json格式,最后将其中的text信息输出即可。
依照这个思路,我们可以在Godot中如法炮制,只是在Godot中支持的语言是GDscript,需要些许的变化。
var msg
func get_response(msg):
var url = 'http://www.tuling123.com/openapi/api'
var data={'key':'*************',
'info' : msg,
'userid':'robot',
}
var query=JSON.print(data)
var headers = ["Content-Type: application/json"]
$HTTPRequest.request(url, headers, true, HTTPClient.METHOD_POST, query)
func _on_HTTPRequest_request_completed(result, response_code, headers, body):
var json = JSON.parse(body.get_string_from_utf8())
var string = json.result['text']
get_node("Label").set_text(string)
如上,既然Godot中没有requests库,我们就要寻找其他可以代替的控件。在Node中有一个HTTPRequest的组件
它的基本函数和信号都可以在文档中查到。 其中我们首先把字典类型的data转化为json格式,通过request函数post。
之后我们在_on_HTTPRequest_request_completed()这个信号中将返回的数据转化为json再将其中的text提取出来,就可以使用啦!
效果如图,还是挺有趣的= =