我是SFML网络的新手,我认为我做的都是错的,我不断地收到这些代码的错误。我所要做的就是发送数据包的位置,然后更新他们在另一个窗口,这是我到目前为止。
#include <iostream>
#include <string>
#include "player.h"
#include "gameAssets.h"
#include "zombie.h"
using namespace std;
sf::Vector2u size(1000, 800);
bool focused = true;
sf::Vector2f newPosition, oldPosition;
//Multiplayer code.
//sf::Thread* thread = 0;
char choice;
sf::Mutex globalMutex;
sf::TcpSocket socket;
sf::IpAddress ip;
void sendandReceiveData(){
//Server half
sf::Packet packetSendX, packetSendY;
packetSendX << oldPosition.x;
packetSendY << oldPosition.y;
socket.send(packetSendX);
socket.send(packetSendY);
sf::Packet packetReceiveX, packetReceiveY;
//Client half
socket.receive(packetReceiveX);
socket.receive(packetReceiveY);
packetReceiveX >> newPosition.x;
packetReceiveY >> newPosition.y;
cout << "Other Players X: " << newPosition.x << endl;
cout << "Other Players Y: " << newPosition.y << endl;
}
int main(){
sf::RenderWindow window(sf::VideoMode(size.x, size.y), "Zombie Defence", sf::Style::Titlebar | sf::Style::Close);
//Limited fps so we dont need deltaTime...
window.setFramerateLimit(60);
window.setVerticalSyncEnabled(true);
player player;
zombie zombie;
gameAssets gameAssets;
player.initialize();
zombie.initialize();
gameAssets.initialize();
gameAssets.loadContent();
zombie.loadContent();
player.loadContent();
//Multiplayer code.
system("CLS");
cout << "Multiplayer Dev Build 0.1" << endl;
cout << " " << endl;
cout << "Enter (S) for server or (C) for client." << endl;
cin >> choice;
if (choice == 'S'){
sf::TcpListener listener;
listener.setBlocking(false);
listener.listen(5000);
listener.accept(socket);
cout << "New Client Connected: " << socket.getRemoteAddress() << endl;
}
else if (choice == 'C'){
cin >> ip;
if (socket.connect(ip, 5000) == sf::Socket::Done){
cout << "Connected to server" << endl;
}
}
while (window.isOpen()){
sf::View view = player.getView();
sf::Vector2f playerPosition = player.getPosition();
sf::Event event;
while (window.pollEvent(event)){
if (event.type == sf::Event::Closed){
window.close();
}
if (event.type == sf::Event::GainedFocus){
focused = 1;
}
else if (event.type == sf::Event::LostFocus){
focused = 0;
}
}
//Only update if window is focused...
if (focused){
//Updating
player.update(window);
zombie.followPlayer(playerPosition);
zombie.update(window);
window.setView(view);
}
oldPosition = player.getPosition();
sendandReceiveData();
window.clear();
gameAssets.draw(window);
zombie.draw(window);
player.draw(window);
window.display();
}
return 0;
}如果有人能帮我一下我做错了什么,我会很感激的,谢谢。
发布于 2014-06-06 18:17:54
我修好了。我所要做的就是添加packetReceiveX.clear();和相同的y来解决这个问题。
https://stackoverflow.com/questions/23859536
复制相似问题