Hey. I'm creating a game for SFML in VS 11 and connect Box2d.
Loading map using
https://github.com/fallahn/sfml-tmxloaderThe problem is that when the character still image flickers.
int main()
{
sf::Vector2i screenSize(800u, 600u); //разрешение экрана
sf::RenderWindow renderWindow(sf::VideoMode(screenSize.x, screenSize.y), "TMX Loader - Box2D Body Creation Example"); //Создаем экран
renderWindow.setVerticalSyncEnabled(true); // Включаем вертикальную синхронизацию (для плавной анимации)
sf::View view; // Камера
view.reset(sf::FloatRect(0.0f, 0.0f, screenSize.x, screenSize.y));
view.setViewport(sf::FloatRect(0.0f, 0.0f, 2.0f, 2.0f)); // Увеличиваем изображение на 2
//создать карту и загрузка карту
tmx::MapLoader ml("maps/");
ml.Load("platformer.tmx");
//create a box2D world
b2World world(tmx::SfToBoxVec(sf::Vector2f(0.f, 300.f))); // Гравитация
CHARACTER Player;
Player.Create();
AnimationManager anim;
anim.loadAnimXML("animations/Anim1.xml",Player.texture);
const std::vector<tmx::MapLayer>& layers = ml.GetLayers();
for (const auto& l : layers) // Смотрим все слои на карте.......... l тоже самое что layers... & указатель
{
if (l.name == "Stat") //Смотрим слой который называется Static
{
for (const auto& o : l.objects) // o тоже самое что l.objects
{
b2Body* b1 = tmx::BodyCreator::Add(o, world);
}
}
else if (l.name == "Din")
{
for (const auto& o : l.objects)
{
Player.body = tmx::BodyCreator::Add(o, world, true , b2BodyType::b2_dynamicBody);
}
}
}
//-----------------------------------//
sf::Clock clock;
while(renderWindow.isOpen())
{
//poll input
sf::Event evt;
while(renderWindow.pollEvent(evt))
{
if (evt.type == sf::Event::Closed)
renderWindow.close();
}
//update
world.Step(1.0f / 60.0f, 3, 3);
//-----------------update the keyboard--------------------------------
Key_Update(Player,anim);
//----------------update the keyboard-------------------------------
sf::Vector2f pos = tmx::BoxToSfVec(Player.body->GetPosition());
//-----------------------draw-------------------------------------------
view.setCenter(pos.x+screenSize.x/4,pos.y+screenSize.y/4);
renderWindow.setView(view);
renderWindow.clear(sf::Color(107,140,255));
renderWindow.draw(ml);
anim.draw(renderWindow,pos);
renderWindow.display();
}
return 0;
}