SFML и C++ Уроки \ Разработка игр › Форумы › SFML System, Window и другие вопросы › непонятная телепортация
В этой теме 11 ответов, 2 участника, последнее обновление MVRKUS 9 года/лет назад.
-
АвторСообщения
-
меня почему-то при нажатии в координаты 0,0 кидает(телепортирует)
не могу понять, почему
не подскажете?C++1234567891011121314151617181920212223242526272829303132float time = clock.getElapsedTime().asMicroseconds();clock.restart();time = time / 800;Vector2i pixelPos = Mouse::getPosition(window);Vector2f pos = window.mapPixelToCoords(pixelPos);sf::Event event;while (window.pollEvent(event)){if (event.type == sf::Event::Closed)window.close();if (event.type == Event::MouseButtonPressed)if (event.key.code == Mouse::Left){player.isMove = true;tempX = pos.x;tempY = pos.y;}}if (player.isMove){distance = sqrt((tempX - player.x)*(tempX - player.x) + (tempY - player.y)*(tempY - player.y));if (distance > 2){player.x = 0.1*time*(tempX - player.x) / distance;player.y = 0.1*time*(tempY - player.y) / distance;}else{ player.isMove = false; std::cout << "ok\n"; }}делал по 18 уроку
Может у тебя какая то функция вызывается , которая присваивает координатам x и y нули. Может инициализация какая-то неправильная вылезла. Весь файл main.cpp выложи
вот
C++123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191#include <SFML/Graphics.hpp>#include <SFML/Audio.hpp>#include "map.h"#include "view.h"#include <iostream>using namespace sf;class Hero{private:public:float x, y;float width, height, dx, dy, speed;int dir;String File;Image img;Texture texture;Sprite sprt;bool isMove;Hero(String F, float X, float Y, float W, float H){File = F;width = W; height = H;isMove = false;img.loadFromFile("images/" + File);img.createMaskFromColor(Color(255, 255, 255));texture.loadFromImage(img);sprt.setTexture(texture);x = X; y = Y;sprt.setTextureRect(IntRect(width, height, width, height));sprt.setOrigin(width / 2, height / 2);//}void Update(float time){intMap();switch (dir){case 0: dx = speed; dy = 0; break;case 1: dx = -speed; dy = 0; break;case 2: dx = 0; dy = speed; break;case 3: dx = 0; dy = -speed; break;default:dx = 0; dy = 0;}x += dx*time;y += dy*time;speed = 0;sprt.setPosition(x, y);}void intMap(){for (int i = y / 32; i < (y + height) / 32; i++)for (int j = x / 32; j < (x + width) / 32; j++){if (TileMap[i][j] == 'g'){if (dy>0){y = i * 32 - height;}if (dy<0){y = i * 32 + 32;}if (dx>0){x = j * 32 - width;}if (dx < 0){x = j * 32 + 32;}}if (TileMap[i][j] == 's'){if (dy>0){y = i * 32 - height;}if (dy<0){y = i * 32 + 32;}if (dx>0){x = j * 32 - width;}if (dx < 0){x = j * 32 + 32;}}}}};int main(){sf::RenderWindow window(sf::VideoMode(800, 600), "Devil");int tempX = 0, tempY = 0;float distance=0;Clock mus;sf::Music music;if (!music.openFromFile("sounds/bg.ogg"))return -1; // errormusic.play();music.setVolume(10);//!!!ГРОМКОСТЬ НУЖНО БУДЕТ ВЕРНУТЬ!!!//view.reset(FloatRect(0, 0, 800, 600));Image imgMap;imgMap.loadFromFile("images/map.png");Texture tMap;tMap.loadFromImage(imgMap);Sprite sMap;sMap.setTexture(tMap);float CurrentFrame = 0;Hero player("player.png", 250, 250, 32, 48);player.sprt.setTextureRect(IntRect(0, 0, 32, 48));Clock clock;getCoord(player.x, player.x);while (window.isOpen()){float tm = mus.getElapsedTime().asSeconds();if (tm > 12.1){mus.restart();music.play();}float time = clock.getElapsedTime().asMicroseconds();clock.restart();time = time / 800;Vector2i pixelPos = Mouse::getPosition(window);Vector2f pos = window.mapPixelToCoords(pixelPos);sf::Event event;while (window.pollEvent(event)){if (event.type == sf::Event::Closed)window.close();if (event.type == Event::MouseButtonPressed)if (event.key.code == Mouse::Left){player.isMove = true;tempX = pos.x;tempY = pos.y;}}if (player.isMove){distance = sqrt((tempX - player.x)*(tempX - player.x) + (tempY - player.y)*(tempY - player.y));if (distance > 2){player.x = 0.1*time*(tempX - player.x) / distance;player.y = 0.1*time*(tempY - player.y) / distance;}else{ player.isMove = false; std::cout << "ok\n"; }}window.setView(view);player.Update(time);window.clear();for (int i = 0; i < hMap; i++)for (int j = 0; j < wMap; j++){if (TileMap[i][j] == ' ')sMap.setTextureRect(IntRect(0, 0, 32, 32));if (TileMap[i][j] == 's')sMap.setTextureRect(IntRect(32, 32, 32, 32));if (TileMap[i][j] == 'g')sMap.setTextureRect(IntRect(0, 32, 32, 32));if (TileMap[i][j] == '1')sMap.setTextureRect(IntRect(32, 0, 32, 32));if (TileMap[i][j] == '2')sMap.setTextureRect(IntRect(64, 0, 32, 32));if (TileMap[i][j] == '4')sMap.setTextureRect(IntRect(128, 0, 32, 32));if (TileMap[i][j] == '6')sMap.setTextureRect(IntRect(192, 0, 32, 32));sMap.setPosition(j * 32, i * 32);window.draw(sMap);}window.draw(player.sprt);window.display();}return 0;}удалил часть кода, которая отвечала за направление и теперь при клике он где то за пределами видимости
закомментировал часть камеры, которая отвечает за границы экрана, и запустив, понял, что герой исчезает с карты вообщесделал вывод координат игрока
он перемещается не в 0,0 а в координаты, близкие к нулю
~0.1-0.2Я завтра твой код запущу у себя и посмотрю в чем дело,сегодня такой возможности скорее всего у меня не будет.
Благодарю)
Хорошо, что вы всегда откликаетесьошибку нашел
она заключалась в том, что вместо “+=”, я написал “=”
как всегда, дьявол в деталях, а я идиотпоздравляю )
С тем, что я идиот? xD
Нет! с тем, что всё наладилось
Благодарю
-
АвторСообщения
Для ответа в этой теме необходимо авторизоваться.