Форум программистов, компьютерный форум, киберфорум
SFML
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 134
1

SFML: врезаясь в пределы окна, герой должен продолжать шагать на месте

09.10.2015, 17:28. Показов 4777. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, как сделать, чтоб герой не выбегал за пределы окна, а, врезаясь в пределы окна,продолжал шагать как бы на месте? При учете того, что карта-это обычная цельная картинка.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2015, 17:28
Ответы с готовыми решениями:

Таймер должен считать от 60 сек до 0. По нажатию кнопки застывать на этом значении, а при повторном продолжать отсчет
Как сделать что бы таймер вел отсчет времени от 60 секунд до 0 после нажатия на кнопку и застывал...

Платформер на SFML: выход за пределы карты
Есть такой код платформера: #include <SFML/Graphics.hpp> #include <iostream> using...

Сворачивание окна по клику в любом месте окна браузера
Приветствую уважаемые форумчане. Есть сайт bm05.ru. Верху над логотипом есть две разворачивающиеся...

Курсор мыши не должен выходить за пределы формы
Здравствуйте, подскажите пожалуйста, каким образом, можно реализовать запрет выхода курсора мыши за...

8
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
09.10.2015, 17:39 2
получить размер окна, отслеживать перемещение героя, и добавить условие
Если положение героя >= конец окна, то положение героя = конец окна -1;
0
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 134
09.10.2015, 18:45  [ТС] 3
А как можно получить размер окна?
0
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 134
09.10.2015, 19:54  [ТС] 4
Пытался сделать, чтоб герой не выходил за пределы карты, размер картинки карты 500 на 500. Почему не работает влево и вверх?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
        for (int i = y / 490; i < (y + h) / 490; i++)//проходимся по всей карте, то есть по всем квадратикам размера 32*32, которые мы окрашивали в 9 уроке. про условия читайте ниже.
            for (int j = x / 490; j<(x + w) / 490; j++)//икс делим на 32, тем самым получаем левый квадратик, с которым персонаж соприкасается. (он ведь больше размера 32*32, поэтому может одновременно стоять на нескольких квадратах). А j<(x + w) / 32 - условие ограничения координат по иксу. то есть координата самого правого квадрата, который соприкасается с персонажем. таким образом идем в цикле слева направо по иксу, проходя по от левого квадрата (соприкасающегося с героем), до правого квадрата (соприкасающегося с героем)
            {
                if (TileMap[i][j] ==! '0')//если наш квадратик соответствует символу 0 (стена), то проверяем "направление скорости" персонажа:
                {
                    if (dy>0)//если мы шли вниз,
                    {
                        y = i * 490 - h;//то стопорим координату игрек персонажа. сначала получаем координату нашего квадратика на карте(стены) и затем вычитаем из высоты спрайта персонажа.
                    }
                    if (dy<0)
                    {
                        y = i * 490 + 490;//аналогично с ходьбой вверх. dy<0, значит мы идем вверх (вспоминаем координаты паинта)
                    }
                    if (dx>0)
                    {
                        x = j * 490 - w;//если идем вправо, то координата Х равна стена (символ 0) минус ширина персонажа
                    }
                    if (dx < 0)
                    {
                        x = j * 490 + 490;//аналогично идем влево
                    }
                }
0
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
09.10.2015, 20:00 5
C++
1
2
3
4
// получение размера окна
sf::Vector2u size = window.getSize();
unsigned int width = size.x;
unsigned int height = size.y;
0
Эксперт С++
4985 / 3092 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
09.10.2015, 20:08 6
Цитата Сообщение от АРТЕ Посмотреть сообщение
Почему не работает влево и вверх?
Потому что ты написал какую-то херню?
0
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
09.10.2015, 20:15 7
castaway, логично
0
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 134
09.10.2015, 20:27  [ТС] 8
А где у меня ошибка: Работает вправо и вниз, но влево и вверх не ограничивает:
карта 500 на 500
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
for (int i = y / 485; i < (y + h) / 485; i++)
for (int j = x / 485; j<(x + w) / 485; j++){
if (TileMap[i][j] ==! '0')
{
 
if (dy>0) 
{
 
y = i * 485 - h;
}
 
if (dy<0)
 
{
 
y = i * 485 + 485;
}
 
if (dx>0)
 
{
 
x = j * 485 - w;
}
 
if (dx < 0)
 
{
 
x = j * 485 + 485; 
}
 
}
 
 
 
 
 
}
 
}
0
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
10.10.2015, 14:47 9
обоже

Тебе надо в цикл перемещения героя по оси Х закинуть проверку на границу Х
А в цикл У, закинуть на проверку по игрику...
C++
1
2
3
4
5
6
7
8
9
10
11
12
//500-485 = 15;  как я понял, это размер героя.
int heroSize = 15;
 
if(myHero.x >= windowSize.x - heroSize)
    myHero.x = windowSize.x - heroSize; 
else if(myHero.x <= windowSize.x +heroSize)
    myHero.x = heroSize; 
 
if(myHero.y >= windowSize.y - heroSize)
    myHero.y = windowSize.y - heroSize; 
else if(myHero.y <= windowSize.y +heroSize)
    myHero.y = heroSize;
0
10.10.2015, 14:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2015, 14:47
Помогаю со студенческими работами здесь

Фрукт должен появлятся в произвольном месте на игровом поле
Прошу помощи!!! Я хочу сделать маленькую игру по типу PacMan делаю ее на Swing! и хочу что...

SFML. Окна. Масштабирование
Доброго времени суток форумчане. Всплыл вопрос на который не могу дать себе ответ и в интернете не...

SFML, определение окна
Функцией &quot;RenderWindow window(VideoMode(1024, 700), &quot;Ind&quot;);&quot; я создал некоторое окно &quot;window&quot;, в...

Ошибка при закрытии окна SFML
При остановке программы через закрытие с помощью крестика, появляется ошибка времени выполнения. На...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru