Положение мыши SFML и загрузка столкновений из файла

Итак, у меня есть две проблемы. Прежде всего я сделал квадрат, который привязан к сетке того же размера, что и мои плитки. Это то, что будет использоваться для смены плиток. Работает нормально, за исключением случая, когда я начинаю прокручивать. Я знаю, почему это так. Это потому, что положение мыши относительно окна, а не карты. Мне было интересно, есть ли способ, которым я мог бы кодировать квадраты, чтобы следовать за моей мышью, даже когда я прокручиваю.

Текущий код:

if (Event.type == sf::Event::MouseMoved)
{

rect.setFillColor(sf::Color(255, 0, 255));
rect.setSize(sf::Vector2f(BLOCKSIZE, BLOCKSIZE));
int x_offset = (Window.getView().getCenter().x - Window.getSize().x /2);
int y_offset = (Window.getView().getCenter().y - Window.getSize().y /2);

rect.setPosition(((sf::Mouse::getPosition(Window).x/32 *32) + (x_offset/32 *32)), ((sf::Mouse::getPosition(Window).y/32 * 32) + (y_offset/32 * 32)));
std::cout << "Mouse position: x:" << ((sf::Mouse::getPosition(Window).x/32 *32) + (x_offset/32 *32)) << " y:" << ((sf::Mouse::getPosition(Window).y/32 * 32) + (y_offset/32 * 32)) << ")\n\n";
}

Следующая проблема — загрузка столкновения.

Код:

for(int i = 0; i < CollisionVector.size(); i++)
{
//Loop through the height of the MapVector
for(int j = 0; j < CollisionVector[i].size(); j++)
{
sf::RectangleShape rect;
//If the stored number is 1
if(CollisionVector[i][j] == 1)
{
rect.setFillColor(sf::Color(255, 0, 255));
rect.setSize(sf::Vector2f(BLOCKSIZE, BLOCKSIZE));
//Set the position of the rectangle
rect.setPosition(j * BLOCKSIZE, i * BLOCKSIZE);
}
//Draw the rectangle
Window.draw(rect);
}
}

Я получаю пустой экран, если добавляю это. Я хотел, чтобы прямоугольники были прозрачными, но я изменил его на розовый на случай, если это будет проблемой (чего не было)

Код прокрутки экрана:

void Camera::Update(float x, float y)
{
cameraX = x - (ScreenWidth / 2);
cameraY = y - (ScreenHeight / 2);

if (cameraX < 0)
cameraX = 0.0;
if (cameraY < 0)
cameraY = 0.0;

CameraPosition.reset(sf::FloatRect(cameraX, cameraY, ScreenWidth, ScreenHeight));
CameraPosition.setViewport(sf::FloatRect(0,0,1,1));
}

0

Решение

Для первого: поскольку вы прокручиваете, изменяя sf::View, рассчитайте смещение вида и добавьте его к своим координатам:

[...]
float x_offset = Window.getView().getCenter().x - Window.getSize().x * .5f;
float y_offset = Window.getView().getCenter().y - Window.getSize().y * .5f;

rect.setPosition(sf::Mouse::getPosition(Window).x/32 * 32 + x_offset,
sf::Mouse::getPosition(Window).y/32 * 32 + y_offset;

Во-вторых, у меня ничего нет сейчас. Я проверил SFML и sf::RectangleShape по умолчанию инициализируется, чтобы иметь размер (0, 0), так что это не проблема. Может быть, проблема в окружающем коде?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]