首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SFML网络问题

SFML网络问题
EN

Stack Overflow用户
提问于 2014-05-25 20:12:21
回答 1查看 273关注 0票数 0

我是SFML网络的新手,我认为我做的都是错的,我不断地收到这些代码的错误。我所要做的就是发送数据包的位置,然后更新他们在另一个窗口,这是我到目前为止。

代码语言:javascript
复制
#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;
}

如果有人能帮我一下我做错了什么,我会很感激的,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-06 18:17:54

我修好了。我所要做的就是添加packetReceiveX.clear();和相同的y来解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23859536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档