Member 12491145 Ответов: 1

Что делает этот фрагмент кода (игра SFML C++)?


Привет ребята,
Я пытаюсь сделать простую игру в пинг-понг с использованием SFML.

Я застрял с куском кода, который я достал из интернета, я не в состоянии понять работу в деталях, так что ребята, пожалуйста, объясните.

Ниже фрагмент кода состоит в том, чтобы переместить мяч в случайном направлении и заставить его подпрыгнуть, когда он ударится о границу или весло
<pre lang="c++">
void update(sf::Clock &clock, sf::Time &elapsed) {

		const float velocity = std::sqrt(direction.x * direction.x + direction.y * direction.y);

		elapsed += clock.restart();
		while (elapsed >= update_ms) {
			const auto pos = ball.getPosition();
			const auto delta = update_ms.asSeconds() * velocity;
			sf::Vector2f new_pos(pos.x + direction.x * delta, pos.y + direction.y * delta);

			if (new_pos.x - ball_radius < 0) { // left window edge
				direction.x *= -1;
				new_pos.x = 0 + ball_radius;
			}
			else if (new_pos.x + ball_radius >= 800) { // right window edge
				direction.x *= -1;
				new_pos.x = 800 - ball_radius;
			}
			else if (new_pos.y - ball_radius < 0) { // top of window
				direction.y *= -1;
				new_pos.y = 0 + ball_radius;
			}
			else if (new_pos.y + ball_radius >= 500) { // bottom of window
				direction.y *= -1;
				new_pos.y = 500 - ball_radius;
			}
			ball.setPosition(new_pos);

			elapsed -= update_ms;
		}
	}


Я немного отредактировал код в соответствии с моим желанием. Я дал ссылку на часы и направление vector2f частной переменной, которая заставит мяч стрелять в случайном направлении.

Что я уже пробовал:

Разбирался в коде немного, но не в деталях, поэтому нужна ваша помощь ребятам.

1 Ответов

Рейтинг:
9

CPallini

Такой код обновляет положение шара, используя следующую формулу:

new_position = current_position + current_speed * delta_time

Затем он проверяет, пересечет ли новая позиция границу, в таком случае он заставляет мяч подпрыгивать, возвращая скорость и обновляя свое положение.


Member 12491145

Спасибо за это,
Это мне очень помогло. Но почему мы должны использовать Дельта-время и что такое Дельта-время.
Пожалуйста, объясните и это.
Заранее спасибо.

CPallini

Дельта-время - это интервал времени, прошедший между current_position и new_position. Другими словами, если
current_position = позиция(t0)
new_position = позиция(t1)
затем
delta_time = Т1-т0

Мы используем его, потому что для того, чтобы создать движение, мы должны обновить положение, пока течет время.