-
Notifications
You must be signed in to change notification settings - Fork 75
Description
I've migrated my code from tmxLoader to tmxLite and I'm having some artifacts when scrolling my map in game, sometimes some lines appear like this:
I'm using the SFML3Example but I think the problem is not there, from what I understand. This does not happen with 64px maps. I was considering recreating my map as a 64px map but maybe this is trivial to solve and also can help others.
EDIT: this is my code, it's a simple VS2022 project just to test this issue
#include "tmxLoader.h" // this is the SFML3Example
#include "SFML/Graphics.hpp"
#include "SFML/Graphics/Color.hpp"
#include "SFML/System.hpp"
#include <SFML/Window/Event.hpp>
#include <SFML/Window/Keyboard.hpp>
int main()
{
sf::RenderWindow window;
window.create(sf::VideoMode(sf::Vector2u(1680, 1050)), "SFML window");
tmx::Map map;
map.load("assets/practice.tmx"); // 128px map made in Tiled!
MapLayer layerZero(map, 0);
MapLayer layerOne(map, 1);
MapLayer layerTwo(map, 2);
sf::View view;
view.setSize({ 1680*2, 1050*2});
view.setCenter(sf::Vector2f(840.f, 525.f));
sf::Vector2f pos = view.getCenter();
sf::Clock globalClock;
sf::Time elapsed;
while (window.isOpen())
{
elapsed = globalClock.restart();
layerZero.update(elapsed);
layerOne.update(elapsed);
layerTwo.update(elapsed);
while (const std::optional event = window.pollEvent())
{
if (event->is<sf::Event::Closed>())
window.close();
else if (const auto* keyPressed = event->getIf<sf::Event::KeyPressed>())
{
if (keyPressed->scancode == sf::Keyboard::Scancode::W)
pos.y -= 2600.f * elapsed.asSeconds();
if (keyPressed->scancode == sf::Keyboard::Scancode::A)
pos.x -= 2600.f * elapsed.asSeconds();
if (keyPressed->scancode == sf::Keyboard::Scancode::S)
pos.y += 2600.f * elapsed.asSeconds();
if (keyPressed->scancode == sf::Keyboard::Scancode::D)
pos.x += 2600.f * elapsed.asSeconds();
}
}
view.setCenter({ pos.x, pos.y });
window.setView(view);
window.clear(sf::Color::Blue);
window.draw(layerZero);
window.draw(layerOne);
window.draw(layerTwo);
window.display();
}
}