-1

このコードを使用して Pure Data に情報を送信しています。Python コンソールに 2 つの異なる変数が表示されますが、Pure Data はそれらを 2 つの個別の数値としてではなく、合計して受信し続けます。

import bge

# run main program
main()

import socket

# get controller 
cont2 = bge.logic.getCurrentController()
# get object that controller is attached to 
owner2 = cont2.owner
# get the current scene 
scene = bge.logic.getCurrentScene()
# get a list of the objects in the scene 
objList = scene.objects

# get object named Box 
enemy = objList["enemy"]
enemy2 = objList["enemy2"]

# get the distance between them 
distance = owner2.getDistanceTo(enemy)
XValue = distance  
print (distance)
# get the distance between them 
distance2 = owner2.getDistanceTo(enemy2)
XValue = distance2  
print (distance2)    

tsr = str(distance + distance2)     
tsr += ';'
host = '127.0.0.1'
port = 50007
msg = '123456;'

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
s.send(tsr.encode())
s.shutdown(0)
s.close()

オブジェクトから最大 10 の異なる距離を送信する必要があります。これは、敵からの距離を見つけることに関係しています。

4

2 に答える 2

3

問題は完全にあなたのpythonコードにあります:

2 つの変数distance1and ( andとdistance2仮定して、文字列を作成します。distance1=666distance2=42

tsr = str(distance1 + distance2)

これで、最初に式が評価されdistance1+distance2(合計されて708)、その値から文字列が作成されます ( "708")。したがって、Python スクリプトは変更されたデータを送信します。

したがって、最初のステップは、値を「追加」する前に値を文字列に変換することです (文字列を追加すると、実際にはそれらが追加されるため)。

tsr = str(distance1) + str(distance2)

"66642"しかし、アペンダーに to 値を空白で区切るように指示していないため、これは実際には string を提供します。

したがって、1つの正しい解決策は次のとおりです。

tsr = str(distance1) + " " + str(distance2)
tsr += ";"
于 2016-03-05T21:43:06.110 に答える