尝试使用 GDScript 连接到树莓派网络套接字

问题描述 投票:0回答:1

我在 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")
python raspberry-pi3 godot gdscript godot4
1个回答
0
投票

答案现在也在问题中,只是为了更容易找到,但我将其发布在这里:

我创建了一个全局文件,在游戏开始时连接到 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")
© www.soinside.com 2019 - 2024. All rights reserved.