2012-10-05 78 views
-2

当我想访问int(COORDINATES 2)时,这不起作用。我该如何解决?我试图访问它现在已经成为全球范围内线程不工作我该如何解决这个问题?

import socket 
import os,sys 
import time 
from threading import Thread 

HOST = '59.191.193.59' 
PORT = 5555 

COORDINATES = [] 

def connect(): 
    globals()['client_socket'] = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    client_socket.connect((HOST,PORT)) 

def update_coordinates(): 
    connect() 
    screen_width = 0 
    screen_height = 0 
    while True: 
     try: 
      client_socket.send("loc\n") 
      data = client_socket.recv(8192) 
     except: 
      connect(); 
      continue; 

     globals()['COORDINATES'] = data.split() 

     if(not(COORDINATES[-1] == "eom" and COORDINATES[0] == "start")): 
      continue 

     if (screen_width != int(COORDINATES[2])): 
     screen_width = int(COORDINATES[2]) 
       screen_height = int(COORDINATES[3]) 

Thread(target=update_coordinates).start() 

while True: 
    print 'ball x' , int(COORDINATES[2]) 

这个座标是我得到enter image description here enter image description here

的错误,如果我我的代码改成这样:

import socket 
import os,sys 
import time 
from threading import Thread 

HOST = '59.191.193.59' 
PORT = 5555 

COORDINATES = [] 

def connect(): 
    globals()['client_socket'] = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    client_socket.connect((HOST,PORT)) 

def update_coordinates(): 
    connect() 
    screen_width = 0 
    screen_height = 0 
    while True: 
     try: 
      client_socket.send("loc\n") 
      data = client_socket.recv(8192) 
     except: 
      connect(); 
      continue; 

     globals()['COORDINATES'] = data.split() 

     if(not(COORDINATES[-1] == "eom" and COORDINATES[0] == "start")): 
      continue 

     if (screen_width != int(COORDINATES[2])): 
     screen_width = int(COORDINATES[2]) 
       screen_height = int(COORDINATES[3]) 

    print int(COORDINATES[8]) 

Thread(target=update_coordinates).start() 

这就是我得到的:

enter image description here

+0

这会帮助,如果你可以发布你得到的错误。 –

+0

@ user1474837已经编辑了这个问题,你现在可以看看它 – Edward

+0

我没有看到一个错误 - 它看起来像你的脚本挂了,没有回来。你可以Ctrl-C来停止脚本吗? –

回答

1

这条线:

Thread(target=update_coordinates()).start() 

应改为:

Thread(target=update_coordinates).start() 

您所提供的结果,你的函数为目标的价值,而不是提供的功能本身。

+0

如果我将其更改为线程(target = update_coordinates).start() 我得到这个错误IndexError:列表索引超出范围 – Edward

+0

@Edward - 这是进步,现在你实际上得到运行时,函数内部存在异常。这对你来说是进步。该错误可能与您在索引到COORDINATES中的行有关。在访问它之前请检查它的价值。 –

+0

我编辑了上面的问题它打印的价值,但我的目标是访问的价值,所以我可以在我的游戏控制循环中使用它?我怎么做? – Edward

相关问题