Представление SFML: setCenter против перемещения. Это сводит меня с ума - PullRequest
0 голосов
/ 27 апреля 2018

Я прихожу снова, чтобы попросить о помощи, основываясь на сообщении SFML Views setCenter vs вращение .

Это должно было быть что-то нелепо простое, но это становится кошмаром!

То, что я хочу, просто: переместите вид в верхний левый угол глобального окна и поверните его, но ось должна быть в 0,0 , а не в центре вида, как по умолчанию.

Проблема в том, что «setCenter» перемещает представление, а «move» изменяет центр представления. То есть одно отменяет другое.

Я много читал, я много просил, но пока никто не дал мне решения.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

К счастью, я получил поддержку от пользователя форума SFML, и решение находится в посте https://stackoverflow.com/a/50069393/5074998.

0 голосов
/ 27 апреля 2018

Если вы посмотрите документацию класса sf :: View (https://www.sfml -dev.org / tutorials / 2.0 / graphics-view.php ):

"В отличие от нарисованных объектов, таких как спрайты или фигуры, чьи позиции определяются их верхним левым углом (и могут быть изменены на любой другой точка), взгляды всегда манипулируют своим центром - это просто удобнее. Вот почему функция для изменения позиция представления называется setCenter, а не setPosition. "

В нем говорится, что происхождение представления находится в его центре. Поэтому, если вы хотите разместить представление в верхнем левом углу, просто сделайте это с помощью:

view.setCenter(view.getWidth() / 2, view.getHeight() / 2);

Если вы хотите центрировать угол окна по центру вида, просто сделайте:

view.setCenter(0,0);

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

Вам подходит следующее?

// This should set the view to the upper left corner with a size of 500x300
view.reset(sf::FloatRect(250, 150, 500, 300)); 

// Now you can rotate the view around its center:
view.setRotation(90);

// Don't forget to apply the view.
window.setView(view);

Надеюсь, это поможет.

...