Созданные ответы форума
-
АвторСообщения
-
Не не помогло, мб это из за того что я почти каждую милисикунду посылаю пакет
Все разобрался проблема была в том что этот метод (.receive) не принимает 3 аргументом(порт) в виде простых цифр, нужно писать unsigned short port = /*port*/; что бы это заработало
Вот весь класс:
C++1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192#include <SFML/Graphics.hpp>#include <SFML/Network.hpp>#include <iostream>//#include "ClientMultiplayer.cpp"; // Мультилпеерная часть клиентаusing namespace std;using namespace sf;class Player {public:// Multiplayerint x, y = 0;string stringIp;IpAddress myIp = IpAddress::getPublicAddress();IpAddress serverip;UdpSocket socket;Packet packet;Packet packetip;// Текущие координаты персонажаint coordX;int coordY;//========// Playerdouble speed = 2.5;int side;Texture texture;Sprite sprite;Player(String File, int x, int y, int side) { // Дописать отправку на сервер координат и side(направление)this->side = side;texture.loadFromFile(File);if (!texture.loadFromFile(File)) {std::cout << "Error";}sprite.setTexture(texture);switch (side) { //Блок sidecase 1:sprite.setTextureRect(IntRect(202, 0, 100, 100)); // поворот на левоbreak;case 2:sprite.setTextureRect(IntRect(101, 0, 100, 100)); // поворот на правоbreak;case 3:sprite.setTextureRect(IntRect(0, 0, 100, 100)); // поворот вверхbreak;case 4:sprite.setTextureRect(IntRect(303, 0, 100, 100)); // поворот внизbreak;}sprite.setPosition(x, y);}void controlling(float time) { // side тут нужен для отправки на сервер данных о том куда повернут персонаж(переделать его)coordX = sprite.getPosition().x;coordY = sprite.getPosition().y;if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) { sprite.move(-speed*time, 0); sprite.setTextureRect(IntRect(202, 0, 100, 100)); side = 1; }if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) { sprite.move(speed*time, 0); sprite.setTextureRect(IntRect(101, 0, 100, 100)); side = 2; }if (sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) { sprite.move(0, -speed*time); sprite.setTextureRect(IntRect(0, 0, 100, 100)); side = 3; }if (sf::Keyboard::isKeyPressed(sf::Keyboard::Down)) { sprite.move(0, speed*time); sprite.setTextureRect(IntRect(303, 0, 100, 100)); side = 4; }}void coordinate() { // Вывод координатcout << "coordinate xx: " << coordX << " y: " << coordY << "\n";}// Multiplayervoid receiveCoordinate() { // Получает данные координаты + сторону движенияsocket.receive(packet, serverip, 2000);packet >> x >> y >> side;drawingOtherSprite();}void sendPacket() { // Отправка данных серверу}void connectionServer() { // Функция приконекта к серверуsocket.bind(2000);stringIp = myIp.toString();packetip << stringIp;socket.send(packetip, serverip, 2000);packetip.clear();}void drawingOtherSprite() { // Для отрисовкиPlayer otherplayer("image/people.png", x, y, side); // заменить на sprite.setPosition(x, y); + switch side}};Спасибо, Только хотел уже написать что разобрался и написать в чем дело так уже написали ответ)
Хмм… ну ладно, спасибо, буду разбираться))
То-есть можно через SFML сделать ОТДЕЛЬНЫЙ сервер?
Пытался создать новый проект с тестовым кодом, после компилирования программа падала, теневая сборка отключена
Все я решил проблему, оп пятаки из за невнемательности я забыл указать строку texture
Нет не выходит все тот же белый квадрат
Вложения:
You must be logged in to view attached files.У меня такое ощущение что он не может открыть файл
Все равно не помогает… что за фигня
Решил проблему, не правильно указала название переменной File там где назначал ее было с маленькой буквы а я писал с большой.
Все решил проблему.(Для тех кто зайдет сюда в надежде узнать ответ) Попробуйте отключить теневую сборку, если у вас Qt то надо зайти в “Проекты” и снять галочку напротив “Теневой сборки”.
Использую такую сборку, единственное что смущает что там MinGw 32 бита а у меня windows 7 64-битный.
Вложения:
You must be logged in to view attached files.Я уже так пробывал.. Не получилось
-
АвторСообщения