Box2d и SFML на Visual Studio 2022. Пришлите пожалуйста сюда уроки и туториалы
Box2d и SFML. Создаю игру в vs 2022 (Super mario bros). Sfml уже изучил и хочу понять Box2D и как с ним работать. На ютубе видел ролики исключительно только для Box2d где они использовали какой то demo для реализации кода. А я бы хотел в чистую создать с нуля проект и не могу для этого найти хороший ролик и документацию для изучения. В плане изучения я имею в виду чтобы там было например что значит строка b2World World; то есть рассказать про b2World подробно. зачем она нужна и тд. Вот мой код проекта:
#include <iostream>
#include <SFML/Graphics.hpp>
#include <box2d/box2d.h>
using namespace sf;
using namespace std;
int main()
{
bool isNol = false;
bool isSpacePress = false;
Font font;
Text text;
font.loadFromFile("C:/Users/Матвей/source/repos/Project2/x64/Debug/Textures/Font/Super Mario Bros. NES.ttf");
text.setFont(font);
text.setCharacterSize(6);
text.setFillColor(Color::Black);
Texture Map;
Map.loadFromFile("C:/Users/Матвей/source/repos/Project2/x64/Debug/Textures/SuperMarioBrosMap1-1-export.png");
Sprite textureMap;
textureMap.setTexture(Map);
Texture texturePlayer;
texturePlayer.loadFromFile("C:/Users/Матвей/source/repos/Project2/x64/Debug/Textures/goomba.png");
Sprite player;
player.setTexture(texturePlayer);
RenderWindow window(VideoMode(1920, 1080), "Super Mario Bros Style");
window.setFramerateLimit(60);
CircleShape circle(50.f);
circle.setPosition(100, 100);
circle.setFillColor(Color::Green);
circle.setOutlineColor(Color::Black);
window.draw(textureMap);
window.draw(player);
window.display();
textureMap.setPosition(0,0);
player.setPosition(40,192);
View camera(Vector2f(0, 0), Vector2f(200,200));
camera.setCenter(100,145);
int moveY = player.getPosition().y;
bool isJump = false;
b2Vec2 gravity(0.f, 9.8f);
b2World World(gravity);
while (window.isOpen())
{
//класс события
Event event;
//обработка очереди событий
while (window.pollEvent(event))
{
if (event.type == Event::Closed)
{
//закрываем окно
window.close();
}
if (event.type == Event::KeyReleased)
{
if (event.key.code == Keyboard::Space)
{
isSpacePress = false;
}
}
}
if (player.getPosition().y >= 192.f - 1.f && player.getPosition().y <= 192.f + 1.f)
{
isSpacePress = true;
}
if (player.getPosition().x >= 0.f - 1.f && player.getPosition().x <= 0.f + 1.f)
{
isNol = true;
}
if (player.getPosition().y >= 127.f - 1.f && player.getPosition().y <= 127.f + 1.f)
{
//player.setPosition().y = 127.f;
isSpacePress = false;
}
if (Keyboard::isKeyPressed(Keyboard::Space)) // isKeyReleased
{
if (isSpacePress == true)
{
if (player.getPosition().y > moveY - 65)
{
isJump = true;
player.move(0.f, -1.5f);
}
}
}
if (Keyboard::isKeyPressed(Keyboard::D))
{
player.move(0.8f, 0.f);
}
if (Keyboard::isKeyPressed(Keyboard::A))
{
if (isNol == false)
{
player.move(-0.8f, 0.f);
}
}
window.setView(camera);
if (player.getPosition().x > 100.0f)
{
camera.setCenter(player.getPosition().x, camera.getCenter().y);
}
if(isJump == false)
{
if (player.getPosition().y < 192)
{
player.move(0.f, 0.8f);
}
}
isNol = false;
isJump = false;
text.setPosition(camera.getCenter().x -90, camera.getCenter().y -95);
text.setString("MoveCharacterX: " + to_string(player.getPosition().x) + "\nMoveCharacterY: " + to_string(player.getPosition().y));
window.clear();
window.draw(textureMap);
window.draw(player);
window.draw(text);
window.display();
}
}
Знаю, что в моем коде проблемы. Что все записано в main и не пытаюсь создавать методы, много if и тд. Но поймите меня правильно я просто недавно стал изучать c++.
Хух надеюсь понятно все рассказал. Надеюсь на понимание, спасибо!
