-1

我正在使用此代码向 Pure Data 发送信息,在 Python 控制台中我看到了两个不同的变量,但是 Pure Data 不断接收它们,而不是作为两个单独的数字相加。

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 代码中:

你有两个变量distance1distance2(让我们假设distance1=666然后distance2=42你构造一个字符串:

tsr = str(distance1 + distance2)

现在这将首先评估表达式distance1+distance2(将它们相加708),然后从该值("708")创建一个字符串。因此,您的 Python 脚本会发送经过处理的数据。

所以你的第一步是在“添加”它们之前将你的值转换为字符串(因为添加字符串实际上是附加它们):

tsr = str(distance1) + str(distance2)

但这真的会给你一个 string "66642",因为你没有告诉 appender 用空格分隔 to 值。

所以一个正确的解决方案是:

tsr = str(distance1) + " " + str(distance2)
tsr += ";"
于 2016-03-05T21:43:06.110 回答
0
var1="5Hello3How3Are3you8I'm FINE2is4that3so?3yes"
#initial measurement

m=var1[0]
m=int(m)
print var1[1:1+m]
INIT_LEN=1
LENGTH=m
n=1
NUMBER_FRAMES=9-1 #number of bytes 9

while n<=NUMBER_FRAMES:
  INIT_LEN=INIT_LEN+LENGTH
  l=var1[INIT_LEN]
  INIT_LEN=INIT_LEN+1
  LENGTH=int(l)
  print var1[INIT_LEN:INIT_LEN+LENGTH]
  n=n+1

如果您愿意将多个字符串连接为单个连接字符串,我建议您通过当前代码。

于 2018-03-05T10:34:53.713 回答