我在一个多人游戏项目中使用了它的策略,因此我需要在创建客户端和服务器的同时发送多个对象的数据,这对服务器中的一个对象和客户端中的一个对象都有效,但是在我将第二个对象添加到服务器后,第二个对象脚本中出现了错误
例如
服务器有两个对象,我可以访问它们来控制它[“Cube”]和[“server”]
而服务器只有一个名为[“Client”]的对象
问题是当我运行服务器时,然后我控制我的对象引擎在客户端屏幕中交换对象
例如,当我单击向上箭头将[“服务器”]对象移动到在客户端屏幕中移动的[“立方体”]对象时
当我单击w键将[“Cube”]对象移动到在客户端屏幕中移动的[“Server”]对象上时
这是我的客户代码 [“client”]对象在游戏引擎中连接到它
#------------Setup--------------#
from pickle import dumps, loads
from mathutils import Vector
from GameLogic import *
import GameLogic as GameLogic
import bge
from socket import *
import socket
import pickle
cont = GameLogic.getCurrentController()
owner = cont.owner
#obj = cont.owner
if not owner['OneTime']:
ServerIP = GameLogic.IP
Serverport = 2052
Clientname = ''
ClientPort = 2053
GameLogic.sClient = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
GameLogic.sClient.bind((Clientname,ClientPort))
GameLogic.host = (ServerIP,Serverport)
GameLogic.sClient.setblocking(0)
owner['OneTime'] = 1
PosYou = list(owner.worldPosition)
scene = getCurrentScene()
Cube = scene.objects["Cube"]
Server = scene.objects["Server"]
PosServer = [0,0,0]
PosCube = [0,0,0]
#------------RECEIVE/SEND--------------#
Data = pickle.dumps((PosYou))
GameLogic.sClient.sendto(Data,GameLogic.host)
try:
#thefucking proplem
Data, SRIP = GameLogic.sClient.recvfrom(1024)
UPData = pickle.loads(Data)
PosServer = [UPData[0],UPData[1],UPData[2]]
Server.worldPosition = PosServer
Data2, SRIP2 = GameLogic.sClient.recvfrom(1024)
UPData2 = pickle.loads(Data2)
PosCube = [UPData2[0],UPData2[1],UPData2[2]]
Cube.worldPosition = PosCube
except OSError:
pass
#---------------THE-END----------------#
这是我的服务器代码 [“服务器”]对象在游戏引擎中连接到它
#------------Setup--------------#
from GameLogic import *
import GameLogic as GameLogic
import bge
from socket import *
import socket
import pickle
from pickle import *
cont = GameLogic.getCurrentController()
owner = cont.owner
#obj = cont.owner
if not owner['OneTime']:
Host = "localhost"
ServerPort = 2052
GameLogic.sServer = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
GameLogic.sServer.bind((Host,ServerPort))
GameLogic.sServer.setblocking(0)
owner['OneTime'] = True
PosYou = list(owner.worldPosition)
scene = getCurrentScene()
Client = scene.objects["Client"]
Cube = scene.objects["Cube"]
PosClient = [0,0,0]
PosCube = [0,0,0]
#------------RECEIVE/SEND--------------#
try:
Data, CLIP = GameLogic.sServer.recvfrom(1024)
UPData = pickle.loads(Data)
PosClient = [UPData[0],UPData[1],UPData[2]]
Client.worldPosition = PosClient
Data = pickle.dumps((PosYou))
GameLogic.sServer.sendto(Data,CLIP)
except OSError:
pass
#---------------THE-END----------------#
第二个对象编码[“Cube”]对象,它连接了游戏引擎中的两个对象 当我运行它的时候,我得到了这个错误
File "secondob.py", line 18, in AttributeError: 'module' object has no attribute 'sServer'
#------------Setup--------------#
from GameLogic import *
import GameLogic as GameLogic
import bge
from socket import *
import socket
import pickle
from pickle import *
cont2 = GameLogic.getCurrentController()
owner2 = cont2.owner
#obj = cont.owner
GameLogic.sServer.setblocking(0)
PosYou2 = list(owner2.worldPosition)
scene = getCurrentScene()
Client = scene.objects["Client"]
PosClient2 = [0,0,0]
#------------RECEIVE/SEND--------------#
try:
Data2, CLIP2 = GameLogic.sServer.recvfrom(1024)
UPData2 = pickle.loads(Data2)
PosClient2 = [UPData2[0],UPData2[1],UPData2[2]]
Client.worldPosition = PosClient2
Data2 = pickle.dumps((PosYou2))
GameLogic.sServer.sendto(Data2,CLIP2)
except OSError:
pass
#---------------THE-END----------------#
目前没有回答
相关问题 更多 >
编程相关推荐