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

В SML игре задать ограничение на выход объекта из границ

26.11.2015, 00:51. Показов 5160. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Пишу игру в Visual Studio. Библиотека SFML. Суть игры: У меня есть самолет, который двигаться влево и право, а с верху на него летят препятствия и их нужно облетать. Как сделать что б самолет не заходил за красные линии, то есть они как барьеры:

Вот код:
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <SFML/Graphics.hpp>
#include <iostream>
using namespace sf;
using namespace std;
 
 
RectangleShape karta(Vector2f(680, 840)); //Создаем прямоугольник
RectangleShape bort_1(Vector2f(30, 840)); //Создаем прямоугольник
RectangleShape bort_2(Vector2f(30, 840)); //Создаем прямоугольник
sf::Image Airplane;
sf::Texture texture;
sf::Sprite sprite;
int Speed = 20; // Создаем переменную скорости, и задаем начальное значение
int x;
int main() {
    
    RenderWindow window(sf::VideoMode(600, 680), "SFML Application");
    window.setFramerateLimit(60); //Задаем значение FPS
    Text Hello;
    karta.setFillColor(Color::Yellow);
    karta.setPosition(0,0);
    bort_1.setFillColor(Color::Red);
    bort_1.setPosition(0, 0);
    bort_2.setFillColor(Color::Red);
    bort_2.setPosition(570, 0);
 
    // load image
    Airplane.loadFromFile("Airplane.png"); // Загружаем картинку
    texture.loadFromImage(Airplane); // Создаем текстуру с картинки
    sprite.setTexture(texture);
    Hello.getFont();
    sprite.setPosition(235, 500);
    cout << "Vvedite 1 dli nachala igru"<<endl;
    //cin >> x;
    // if (x == 1) {
        while (window.isOpen()) {
 
            Event event;
            while (window.pollEvent(event)) {
 
                if (event.type == Event::Closed)
                    window.close();
            }
 
            if (Keyboard::isKeyPressed(Keyboard::Left))
            {
                sprite.move(-Speed, 0);
            }
            if (Keyboard::isKeyPressed(Keyboard::Right))
            {
                sprite.move(Speed, 0);
            }
 
            window.clear();
 
            window.draw(karta);
            window.draw(sprite);
            window.draw(bort_1);
            window.draw(bort_2);
            window.display();
        }
    }
//}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.11.2015, 00:51
Ответы с готовыми решениями:

Ограничение границ панели
Доброго времени суток. Суть такова: после запуска программы возникает окно, на котором расположены 2 панели. На панели слева...

Ограничение мышки в игре
Мне нужно что бы мышка отступала от краев в игре на 10 пикселей. Как такое реализовать? Например: ...

Разрешить игре выход в интернет
Антивируса нету, брандмауэр отключен, файл hosts проверяли. Посоветуйте чтот плз.

8
 Аватар для _Valera_
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
26.11.2015, 01:02
Что такое...
C++
1
2
3
4
if( sprite.getPosition().x < 0)
      sprite.setPosition(0, sprite.getPosition().y);
else if(sprite.getPosition().x > 600 )
     sprite.setPosition(600, sprite.getPosition().y);
0
 Аватар для Cheshyrsky_Kot
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 30
26.11.2015, 01:08  [ТС]
_Valera_, Спасибо, но оно только вправо упирается, а влево уходит
0
 Аватар для _Valera_
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
26.11.2015, 01:10
Цитата Сообщение от Cheshyrsky_Kot Посмотреть сообщение
_Valera_, Спасибо, но оно только вправо упирается, а влево уходит
Возможно это из-за точки "происхождения" то есть позиция вернулась не для центра спрайта, а для его угла
0
 Аватар для Cheshyrsky_Kot
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 30
26.11.2015, 01:11  [ТС]
_Valera_,
Цитата Сообщение от Cheshyrsky_Kot Посмотреть сообщение
_Valera_, Спасибо, но оно только вправо упирается, а влево уходит
Оййй, наоборот
0
 Аватар для _Valera_
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
26.11.2015, 01:14
http://www.sfml-dev.org/tutori... nsform.php
раздел "Origin"

Добавлено через 20 секунд
Цитата Сообщение от Cheshyrsky_Kot Посмотреть сообщение
Оййй, наоборот
тем более
Цитата Сообщение от _Valera_ Посмотреть сообщение
Возможно это из-за точки "происхождения" то есть позиция вернулась не для центра спрайта, а для его угла
Добавлено через 2 минуты
если я еще не забыл функции, то вставь это в место настройки спрайта.
C++
1
sprite.setOrigin(sprite.getSize().x/2, sprite.getSize().y/2);
0
 Аватар для Cheshyrsky_Kot
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 30
26.11.2015, 01:18  [ТС]
_Valera_, Пишит, что в библиотеке нету такой функции "getSize"
Цитата Сообщение от _Valera_ Посмотреть сообщение
sprite.setOrigin(sprite.getSize().x/2, sprite.getSize().y/2);
а для чего это?

Добавлено через 1 минуту
_Valera_, Точней не
Цитата Сообщение от Cheshyrsky_Kot Посмотреть сообщение
библиотеке нету такой функции "getSize"
, а class sprite не содержит члена getSize
0
 Аватар для _Valera_
495 / 377 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
26.11.2015, 01:25
Цитата Сообщение от Cheshyrsky_Kot Посмотреть сообщение
_Valera_, Пишит, что в библиотеке нету такой функции "getSize"
ну так еще может, забыл уже...
C++
1
sprite.setOrigin(sprite.getTextureRect().width/2, sprite.getTextureRect().height/2);
Цитата Сообщение от Cheshyrsky_Kot Посмотреть сообщение
а для чего это?
Что бы переставить точку в центр.
0
 Аватар для Cheshyrsky_Kot
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 30
26.11.2015, 01:49  [ТС]
_Valera_, Большое спасибо!) Все получилось)) Теперь буду искать как сделать препятствия и их движение с верху в низ
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.11.2015, 01:49
Помогаю со студенческими работами здесь

При редактировании dataGridView говорит индекс выход за пределы границ, что делать?
fr1.dataGridView1.SelectedCells.Value = Convert.ToString(count); fr1.dataGridView1.SelectedCells.Value = textBox2.Text; ...

Ограничение зоны на карте в 2D игре
Всем привет, как сделать ограничение, до красных линий? Как на этой картинке.

Выход в меню в игре Pac-Man
Через какую операцию можно прописать кнопку выхода в главное меню?

Выход за пределы значения функции LOCATE в игре
Помогите пожалуйста с моей проблемой: в моей игре (простейшей бродилке) игрок не может сделать ни одного движения, так как при нажатии...

Как настроить ограничение пользователей на выход в инет
Привет всем! Ситуация такая. Стоит сервак, на нем сидит Wingate. И много премного компов юзеров. Для юзеров все настроено, разделены на...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru