我在 Raspberry Pi 上编写了 Python 代码,当声音传感器被触发时发送数据。当我使用Python脚本连接到它时,一切正常,但由于某种原因,Godot 4无法识别通过keyboard.press_and_release()按下的按钮,所以我考虑直接在Godot的gdscript中建立连接。由于某种原因,即使服务器端说已连接,状态也始终为连接。
我在 GDScript 中使用 WebSocketPeer 连接到 URL。如果有任何替代方案,我希望得到一些建议,或者只是一种将 py 脚本收到的响应注册为 Godot 输入的方法
解决方案
我创建了一个全局文件,在游戏开始时连接到 pi 服务器:
extends Node
var players = []
var scene
const port = 8880
var ip = "192.168.4.1"
var connection
func _ready():
connection = StreamPeerTCP.new()
connection.connect_to_host( ip,port )
然后我只需在需要的地方使用响应并模拟按钮:
func _process(delta):
GameData.connection.poll()
var state = GameData.connection.get_status()
if GameData.connection and state == GameData.connection.STATUS_CONNECTED:
if GameData.connection.get_available_bytes() > 0:
var s = GameData.connection.get_utf8_string(GameData.connection.get_available_bytes())
print(str(s))
if str(s) == "1":
Input.action_press("1")
elif str(s) == " ":
Input.action_press("space")
答案现在也在问题中,只是为了更容易找到,但我将其发布在这里:
我创建了一个全局文件,在游戏开始时连接到 pi 服务器:
extends Node
var players = []
var scene
const port = 8880
var ip = "192.168.4.1"
var connection
func _ready():
connection = StreamPeerTCP.new()
connection.connect_to_host( ip,port )
然后我只需在需要的地方使用响应并模拟按钮:
func _process(delta):
GameData.connection.poll()
var state = GameData.connection.get_status()
if GameData.connection and state == GameData.connection.STATUS_CONNECTED:
if GameData.connection.get_available_bytes() > 0:
var s = GameData.connection.get_utf8_string(GameData.connection.get_available_bytes())
print(str(s))
if str(s) == "1":
Input.action_press("1")
elif str(s) == " ":
Input.action_press("space")