@Gotenks

За что отвечает каждая функция?

Заранее извиняюсь за глупые вопросы, мне важно понять то, что происходит в моём коде.
Ситуация такая, что мне не всегда понятно по документации о чём там говорится. Часто пишется сложным новичку языком, а если вдобавок на английском, то понять что либо вообще сложно.
Код
#include "pch.h"
#include <iostream>
#include <SFML\Graphics.hpp>

int main()
{
	sf::RenderWindow window(sf::VideoMode(720, 500), "Prompt");
	sf::Texture OneWindow;
	OneWindow.loadFromFile("Fon.jpg");
	
	sf::Sprite OW;
	OW.setTexture(OneWindow);
	OW.setPosition(0, 0);
	while (window.isOpen())
	{
		sf::Event event;
		while (window.pollEvent(event))
		{
			if (event.type == sf::Event::Closed)
				window.close();
		}
		window.clear();
		window.draw(OW);
		window.display();
	}
}

Мне интересно, почему если из этого кода убрать 24ую строчку, то происходит вот такой
эффект?
5c549fa64d969863658200.png
За что она вообще отвечает?
Мы же вроде как в 23ей строке прорисовываем окно?
Для чего нам нужна 22 строчка? Если её убрать, то вроде ничего не меняется.
И почему без цикла обработки событий(17 строка) у нас постоянно грузится окно? То есть я навожу курсор на окно и он показывает типа это окно грузится, грузится оно бесконечно...
  • Вопрос задан
  • 109 просмотров
Решения вопроса 1
15432
@15432
Системный программист ^_^
Ну опять же, лезем в интернет, в документацию...

display отображает на экран всё, что было "нарисовано" в процессе рендеринга. Например, у нас несколько этапов "прорисовки", а показать надо только финальный результат.
void sf::Window::display ( )
Display on screen what has been rendered to the window so far.
This function is typically called after all OpenGL rendering has been done for the current frame, in order to show it on screen.


clear очищает область "рисовки". Иначе всё нарисуется поверх прошлой картинки. Представьте, что вы рисуете секундную стрелку на часах, а старое изображение стрелки не стирается.

void sf::RenderTarget::clear ( const Color & color = Color(0, 0, 0, 255) )
Clear the entire target with a single color.
This function is usually called once every frame, to clear the previous contents of the target.


Обработка событий - это уже особенности WinApi. Каждый пользовательский объект в Windows имеет очередь событий, и в коде обязана быть функция их обработки, если вы события не "потребляете" (такие как нажатие клавиш, перемещение курсора), очередь "забивается" и происходит такая канитель с значком загрузки.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы